理解new
首先先补一张图,关于原型链的
new 关键字干了些什么呢
首先他创建了一个新的空对象,然后获取了传入的构造函数以及参数,再将新创建的空对象实例的__proto__属性指向了构造函数的prototype属性(也就是原型),然后新建一个变量,用apply方法把构造函数和参数绑定在新对象中的结果进行赋值。最后返回结果
function fakeNew() {
var obj = Object.create(Object.prototype)
var Constructor = [].shift.call(arguments)
obj.__proto__ = Constructor.prototype
var res = Constructor.apply(obj,argments)
return typeof res = 'Object'?res:obj
}
如何正确的判断this
暂且简陋的归纳。。。
var obj = {
a: 1,
b: function(){
console.log(this);
}
}
1、作为对象调用时,指向该对象 obj.b(); // 指向obj
2、作为函数调用, var b = obj.b; b(); // 指向全局window
3、作为构造函数调用 var b = new Fun(); // this指向当前实例对象
4、作为call与apply调用 obj.b.apply(object, []); // this指向当前的object