《Learning JavaScript Design Patterns》原型链中的this值问题?

发布于 2022-09-12 00:19:54 字数 422 浏览 15 评论 0

这本书里面工厂模式的代码如下
QQ图片20191220120444.png
执行carFactory.createVehicle()时调用VehicleFactory.prototype.createVehicle()函数,此时this的值是VehicleFactory

但是,执行下面的代码时,
QQ图片20191220120450.png
使用原型链继承后,同样执行VehicleFactory.prototype.createVehicle()函数,为什么此时this的值是TruckFactory?

请问这是什么机理?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

彼岸花ソ最美的依靠 2022-09-19 00:19:54

JS对象设置新属性机制是:原型中有则覆盖,无则创建。都是基于当前实例中的this

阳光下慵懒的猫 2022-09-19 00:19:54

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对象,

一般来讲:

  1. 函数普通调用(如mytest()),匿名函数执行,this指向全局对象。
  2. 函数作为对象方法调用(比如obj.test()),this指向该对象。
  3. 构造函数中的this指向新创建的实例。
月寒剑心 2022-09-19 00:19:54

普通函数this谁调用指向谁,object.func()指定func的调用者为object,则this指向object。
非严格模式下没有指定调用者this指向全局对象(浏览器环境window,Node环境global);
严格模式下没有指定调用者this为undefined.

关于this:http://wintc.top/article/28

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文