gpt4 book ai didi

javascript - 不使用原型(prototype)向函数添加属性

转载 作者:行者123 更新时间:2023-11-28 01:50:30 27 4
gpt4 key购买 nike

是否可以在不使用原型(prototype)的情况下向函数添加属性?我知道使用原型(prototype)您可以执行以下操作:

function Gadget(name, color) { 
this.name = name;
this.color = color;
this.whatAreYou = function(){
return 'I am a ' + this.color + ' ' + this.name;
}
}

如果没有原型(prototype)对象,可以实现同样的目标吗?

最佳答案

您所问的内容有点困惑。您当前没有为您的方法或属性使用原型(prototype)(无法从您的问题中判断您是否意识到这一点),并且如果您使用 new 从函数创建对象,那么该技术就可以正常工作像这样:

function Gadget(name, color) { 
this.name = name;
this.color = color;
this.whatAreYou = function(){
return 'I am a ' + this.color + ' ' + this.name;
}
}

var x = new Gadget("Faucet", "red");
x.whatAreYou(); // returns 'I am a red Faucet'

工作演示:http://jsfiddle.net/jfriend00/wPP7N/

当使用new运算符时,它会创建一个新对象并调用函数,并将this分配给新对象。添加到构造函数中 this 指向的对象的任何属性都会成为新对象的属性。

事实上,在您的示例中,具有动态值(如 namecolor)的属性通常在构造函数中这样分配,因为使用原型(prototype)没有什么优势它们是因为它们被分配了一个动态值。使用原型(prototype)分配诸如 whatAreYou 方法之类的方法具有性能优势,因为在构造函数时需要运行的代码较少 - 尽管差异并不大。

<小时/>

为了进行比较和对比,使用原型(prototype)定义方法的代码如下所示:

function Gadget(name, color) { 
this.name = name;
this.color = color;
}

Gadget.prototype.whatAreYou = function(){
return 'I am a ' + this.color + ' ' + this.name;
}

var x = new Gadget("Faucet", "red");
x.whatAreYou(); // returns 'I am a red Faucet'
<小时/>

如果你只是简单地调用该函数,如下所示:

Gadget();

然后,没有创建新对象,并且 this 将指向全局对象,或者将是 未定义(在严格模式下),因此属性不会打开特定于小工具的对象。

关于javascript - 不使用原型(prototype)向函数添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748737/

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