5

在 codecademy.com 上学习 javascript 课程时,我有点困惑。

所以首先我们一直在学习如何向一个类添加方法:

function Dog (breed) {
    this.breed = breed;
    this.sayHello = function () {
        console.log("Hello this is a " + this.breed + " dog");
    }
};
var someDog = new Dog("golden retriever");
someDog.sayHello();

然后我们开始了“原型”。还有这个例子:

function Dog (breed) {
    this.breed = breed;
};
Dog.prototype.sayHello = function () {
    console.log("Hello this is a " + this.breed + " dog");
}
var someDog = new Dog("golden retriever");
someDog.sayHello();

这两个例子都给出了相同的结果。这两个例子只是做同一件事的两种方式吗?还是两者之间存在实际差异?

4

2 回答 2

7

不同之处在于,在第二种情况下,所有实例共享相同的sayHello功能。这更有效,尤其是在您创建大量实例的情况下。

于 2013-10-19T17:12:23.470 回答
2

原型方法 sayHello 由 Dog 类的所有实例共享,而不是在构造函数中添加它,会为每个实例创建一个新副本,浪费空间和时间。

以下是new运算符在文字中的工作方式:

https://gist.github.com/Havvy/5037770

下面是new运算符使用图片的工作方式:

在此处输入图像描述

于 2013-10-19T17:38:02.907 回答