一, 创建对象的三种方式
o1 和 o2 为一种
- var o1={name:'o1'};
- console.log(o1);
- var o2=new Object({name:'o2'});
- console.log(o2);
- var M=function (name) {
- this.name=name
- };
- var o3=new M('o3');
- console.log(o3);
- var p={name:'p'};
- var o4=Object.create(p);
- console.log(o4);
二, 构造函数, 原型, 实例, 原型对象
普通函数 new 时本身变成构造函数
声明函数会自动增加 prototype 属性就是原型对象, 也只有函数有 prototype, 对象是没有的, 但是函数本身是一个实例, 因此函数也有__proto__.
通过以下方式验证:
M 构造函数.__proto===Function.prototype 为 true, 可说明 M 构造函数是 Function 的一个实例.
原型对象的 constructor 属性指向构造函数
实例的__proto__指向构造函数的原型对象
原型链是针对构造函数的, 构造函数生成实例后, 实例的某个属性虽然未在实例定义, 但是它会往构造函数的属性查找, 这个查找过程为原型链
来源: http://www.bubuko.com/infodetail-2689157.html