gpt4 book ai didi

javascript - 在类定义中使用 this.prototype?

转载 作者:行者123 更新时间:2023-11-30 18:36:02 25 4
gpt4 key购买 nike

我有一个类定义,它是类定义的一部分。

var someObject = {
someClass: function() {
this.someMethod = function() {
alert('hello');
};
}
}

我被告知我应该使用原型(prototype)来添加方法,因为它只需要为对象的所有实例创建一次。问题是我似乎需要在定义构造函数后添加原型(prototype)方法,就像这样...

var someObject = {
someClass: function() {

}
}

someObject.someClass.prototype.someMethod = function() {
alert('hello');
};

理想情况下,我想像这样在构造函数中定义原型(prototype)方法......

var someObject = {
someClass: function() {
this.prototype.someMethod = function() {
alert('hello');
};
}
}

这会导致错误,但会指出原型(prototype)为空或不是对象。有没有办法实现我想要的,或者这是不可能的?

最佳答案

您可以使用 arguments.callee 使其工作,或者 - 如果您不覆盖构造函数的 .prototype 属性 - this.constructor 而不是普通的 this,即

var someObject = {
someClass: function() {
// this.constructor.prototype should work as well
arguments.callee.prototype.someMethod = function() {
alert('hello');
};
}
};

但是,将函数表达式放回到构造函数中违背了整个练习的目的——将函数对象的引用存储在原型(prototype)而不是实例中并不重要,您仍然在创建一个新的每个构造函数调用一个!

一个可能的解决方案是使用匿名构造函数而不是对象字面量,这样可以免费获得额外的作用域:

var someObject = new (function() {
function someClass() {}

someClass.prototype.someMethod = function() {
alert('hello');
};

this.someClass = someClass;
});

参见 Paul's answer对于使用对象文字和包装函数的等效解决方案,这可能更熟悉。

关于javascript - 在类定义中使用 this.prototype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8172546/

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