var name = 'qianlong';
var showName = function () {
console.log(this.name);
console.log(this === window);
};
showName();
你猜一下最终输出啥
qianlong
true
那这样呢?
var name = 'qianlong';
var showName = function () {
console.log(this.name);
console.log(this === window);
};
showName.call();
没错和上面是一样的还是输出qianlong和true
再接下来
var name = 'qianlong';
var showName = function () {
console.log(this.name);
console.log(this === window);
};
showName.call(undefined);
showName.call(null);
showName.call({});
call 方法就是把目标方法绑定参数对象去执行。
func.call(obj),此时func的执行体如果有this的话,其this指向obj~var inst = new SubType();首先,SubType构造函数的this就是指向SubType实例,然后SuperType.call(this)注意这里的this就是SubType实例,此时也就是相当于执行SubType实例.SuperType()这个时候SuperType函数里的this指向的是SubType实例,所以执行体里的
this.colors就是ins.colors了。觉得回答这个问题需要弄明白
函数的调用模式this这两个问题在javascript中都相对复杂,想要说清楚,还是蛮难的,我们就以上两个问题作部分解答
函数的调用模式之
函数调用你猜一下最终输出啥
那这样呢?
没错和上面是一样的还是输出
qianlong和true再接下来
这次又是什么呢?
得出结论
再来,new中的this指的是什么东西
你发现了啥? 使用new来调用函数的时候,内部的this就是指向,最终生成的那个
对象所以明白了以上两点,现在开始解答你的问题。
不懂为什么this会指向 new SubType()这个对象?所以,楼主你应该明白了
我说简单点,在类内部访问实例是通过this来访问的
当我们new一个函数的时候发生了什么?
所以,应该说明白了把,楼主可以用控制台试试