gpt4 book ai didi

Javascript 对象创建与 this 关键字和原型(prototype)属性的混淆

转载 作者:行者123 更新时间:2023-11-27 23:38:53 25 4
gpt4 key购买 nike

我尝试按如下方式创建一个 JavaScript 对象

var SuperObj = function(){
this.super = "super from Super";
this.prototype.getSuper = function(){
return this.super;
}
}

上面的代码抛出错误:

TypeError: Cannot set property 'getSuper' of undefined

但是,当我尝试以下代码时,它起作用了。

var SuperObj = function(){
this.super = "super from Super";
SuperObj.prototype.getSuper = function(){
return this.super;
}
}

我想知道其中的区别。我认为在第一种情况下,两个“this”共享相同的执行环境。为什么我们可以使用它来添加属性但不能在原型(prototype)属性中使用它?

最佳答案

SuperObj.prototypethis.prototype 不是同一件事。对象实例上没有名为 prototype 的默认属性。

以下内容将完成您想要做的事情

var SuperObj = function(){
this.super = "super from Super";
// Here, this.constructor === SuperObj
this.constructor.prototype.getSuper = function(){
return this.super;
}
}

话虽如此,我从未找到在构造过程中设置原型(prototype)属性的有效案例。原型(prototype)属性设置一次,对象属性通过每个构造函数设置。请参阅Javascript inheritance: call super-constructor or use prototype chain?

关于Javascript 对象创建与 this 关键字和原型(prototype)属性的混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33874289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com