gpt4 book ai didi

javascript - 为什么我们使用 "prototype"属性向构造函数实例添加方法?

转载 作者:行者123 更新时间:2023-12-02 15:59:57 26 4
gpt4 key购买 nike

我正在创建一个 JavaScript 构造函数。考虑这个例子:

function Student(name)
{
this.name = name;
}

Student.prototype.printName = function(){
console.log(this.name);
}

var s = new Student("Eden");
s.printName();

上面的代码运行良好。但我也可以这样写:

function Student(name)
{
this.name = name;

this.printName = function(){
console.log(this.name);
}
}

var s = new Student("Eden");
s.printName();

我觉得第二种方法是正确的,因为 printName应该是新对象自己的属性而不是继承的属性。添加到prototype使其成为继承属性(property)。

为什么开发者更喜欢第一种方法?

最佳答案

通过将函数直接附加到构造函数中的 this,这意味着 Student每个实例都有其自己的 printName< 副本。这效率不太高。通过将其附加到 Studentprototype 链,printName 函数和 Student 的任何实例都只有一份副本code> 将其包含在其原型(prototype)链中。

虽然这两种将函数附加到对象的方法还有其他差异,但这是最简单且最容易记住的。

如果您想了解两者差异的完整原因词典,请参阅 this answer一个极其相似的问题。

关于javascript - 为什么我们使用 "prototype"属性向构造函数实例添加方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31273168/

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