gpt4 book ai didi

javascript - 将方法分配给函数内部或外部原型(prototype)的区别

转载 作者:行者123 更新时间:2023-11-30 12:57:58 26 4
gpt4 key购买 nike

我有一个充当基类的函数,我想向它添加方法。我可以通过名称(在函数外部)或不引用函数名称(在函数内部)将方法添加到函数原型(prototype):

1) 引用名称

Base.prototype.getResult = function () {
return 5;
}

2)不要引用名字

function Base() {
this.constructor.prototype.getResult = function () {
return 5;
}
}

我很好奇这两种方法之间有什么区别(有什么影响)?

编辑:更新了我的问题以包含 Jacob Krall 对此建议的示例:这意味着 Base.prototype.getResult 将在第一个 Base 对象被构造之前是未定义的(因此,例如,您不能在不同类型的对象上调用它使用 Base.getResult.apply(this) 直到创建第一个 Base 对象

function Base() {
this.constructor.prototype.getResult3 = function () {
return alert(this.variable);
}
}

Base.prototype.getResult2 = function () {
return alert(this.variable);
}

var o = {
"variable":5
};

Base.prototype.getResult2.call(o); //works
try {
Base.prototype.getResult3.call(o); //doesn't work
} catch(e) {
alert('exception is catched');
}

var base = new Base();
base.getResult3.call(o); //works

最佳答案

在第一个示例中,您在每个 Base 对象的原型(prototype)上设置了 getResult。这发生在程序执行的开始,并且很容易推理。我建议这样做。

在第二个示例中,每次构造 new Base() 时,您都会在每个 Base 对象的原型(prototype)上设置 getResult

这意味着 Base.prototype.getResult 将是 undefined 直到第一个 Base 对象被构造(所以,例如,你不能调用它在不同类型的对象上使用 Base.getResult.apply(this) 直到第一个 Base 对象被创建之后,这很奇怪)。其次,这样做很浪费,因为每次调用构造函数时都会创建一个新的 Function 并将其分配给 Base.prototype.getResult

关于javascript - 将方法分配给函数内部或外部原型(prototype)的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18404733/

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