这本书里面工厂模式的代码如下
执行carFactory.createVehicle()时调用VehicleFactory.prototype.createVehicle()函数,此时this的值是VehicleFactory
但是,执行下面的代码时,
使用原型链继承后,同样执行VehicleFactory.prototype.createVehicle()函数,为什么此时this的值是TruckFactory?
请问这是什么机理?
这本书里面工厂模式的代码如下
执行carFactory.createVehicle()时调用VehicleFactory.prototype.createVehicle()函数,此时this的值是VehicleFactory
但是,执行下面的代码时,
使用原型链继承后,同样执行VehicleFactory.prototype.createVehicle()函数,为什么此时this的值是TruckFactory?
请问这是什么机理?
this的值不是根据函数创建的时候指定的,而是与运行时环境有关的,它指向的是调用函数的对象。
这里createVehicle()两次分别被carFactory和truckFactory两个不同的对象调用,两次调用分别指向他们。
var obj = {
test: function() {
console.log(this)
}
}
obj.test() // test函数被obj调用,this指向obj对象
var mytest = obj.test
mytest() // mytest被全局对象调用,相当于window.mytest(), this指向全局window对象,
一般来讲:
mytest()
),匿名函数执行,this
指向全局对象。obj.test()
),this
指向该对象。普通函数this谁调用指向谁,object.func()指定func的调用者为object,则this指向object。
非严格模式下没有指定调用者this指向全局对象(浏览器环境window,Node环境global);
严格模式下没有指定调用者this为undefined.
关于this:http://wintc.top/article/28
10 回答11.7k 阅读
2 回答3.2k 阅读✓ 已解决
2 回答4.3k 阅读✓ 已解决
3 回答1.9k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
5 回答3.8k 阅读
JS对象设置新属性机制是:原型中有则覆盖,无则创建。都是基于当前实例中的this