大纲
- 对象是怎么产生的
- 什么是原型
- 什么是原型链
总结:
- 每一个构造方法都对应一个原型
- 访问原型的方法:
- 构造函数.prototype
- 对象(实例).proto
- 实例(构造方法)的原型还存在原型 实例.proto.proto,最终的原型指向了Object.prototype
- 访问一个实例(对象)的属性, 从实例的内部开始查找 实例内部 => 实例的原型 => 原型的原型 => 上一级原型 => Object的原型
- 若找到就返回
- 否则返回undefined
var obj = {};
var obj2 = new Object(); // Object是构造方法,专门用来创建对象的
console.log(typeof Object);
var date = new Date(); // Date也是构造方法
// 自定义的构造方法
function Student(age,name) {
this.age = age;
this.name = name;
}
var stu1 = new Student(10,'Tom');
var stu2 = new Student(20,'孙强');
var stu3 = new Student(18,'感化');
console.log(stu1,stu2,stu3);
// 猫类
class Cat {
// 构造方法
constructor() {
console.log('执行构造方法');
this.age = 2;
this.name = '布偶';
}
}
var cat = new Cat();
console.log(cat);
<script>
// 猫类
// class Cat {
// // 构造方法
// constructor() {
// this.age = 2;
// this.name = '布偶';
// }
// say() {
// console.log('猫的名字是',this.name);
// }
// aaa() {
// console.log('aaaa');
// }
// bbbb() {
// console.log('bbbb');
// }
// }
// var cat = new Cat();
// console.log(cat);
function Cat() {
this.age = 2;
this.name = '布偶';
}
Cat.prototype.say = function () {
console.log(this.name);
}
Cat.prototype.aaa = function () {
console.log('aaa');
}
Cat.prototype.bbb = function () {
console.log('bbb');
}
var cat = new Cat();
console.log('prototype',Cat.prototype);
</script>
<script>
Object.prototype.bb = 1000;
function Cat() {
this.age = 2;
this.name = '布偶';
}
Cat.prototype.aa = 100;
var cat = new Cat();
console.log(Cat.prototype === cat.__proto__); // true
console.log(cat.__proto__.__proto__ === Object.prototype); // true
var date = new Date();
console.log(date.__proto__.__proto__ === Object.prototype); // true
console.log(typeof cat.age.toString());
</script>