创建对象有几种方法
第一种
let o1 = { name: 'o1' };
let o2 = new Object({ name: 'o2' });
第二种
let M = function(name){this.name = 'name'};
let o3 = new M('o3');
第三种
let P = {name:'o4'};
let o4 = Object.create(P)
原形 构造函数 实例 原型链
原型链:我从一个实例对象往向找,构造这个实例的相关联的对象,这个关联对象在向找创造他的相关联对象以此类推 , 一直到Object.prototype 终 .通过 __proto__ prototype 来实现查找
instanceof原理
实例对象.__proto__ === 构造函数.prototype 是否是相同的引用
注意 : o3 instanceof Object //true M.__proto__ === Object.__proto_ // true
o3.__proto__.constructor == M 这样判断会更加严谨
new 运算符
foo 构造函数
1: 一个新的对象被创建 它继承自foo.prototype
2: 构造函数foo被执行,执行的时候,相应的穿参会被传入,同时上下文(this)会被指定为这个新的实例 。new foo 等同于 new foo() 只能用户不传递任何参数的情况下
3: 如果构造函数返回一个'对象', 那么这个对象会取代整个new出来的结果,如果构造函数没有返回对象, 那么new出来的结果为步骤1 创建的对象
var new2 = function (func) {
var o = Object.create(func.prototype)
var k = func.call(o)
if (typeof k == 'object') {
return k
} else {
return o
}
}
验证 o6 = new2(M)