Javascript 原型-向类添加函数

Javascript 原型-向类添加函数,javascript,Javascript,我现在正在学习原型。将函数“sayName”放在类中还是稍后通过原型添加它更好?还是相同,取决于具体情况 function Animal(name,numLegs){ this.name = name; this.numLegs = numLegs; this.sayName = function(){ console.log("Hi my name is " + this.name); }; } var penguin = new Ani

我现在正在学习原型。将函数“sayName”放在类中还是稍后通过原型添加它更好?还是相同,取决于具体情况

function Animal(name,numLegs){
    this.name = name;
    this.numLegs = numLegs;
    this.sayName = function(){
         console.log("Hi my name is " + this.name);

    };
}


var penguin = new Animal("Captain Cook", 2);
penguin.sayName();


这不一样,因为第一个版本将使用更多内存,
Animal
的实例有自己的
this.sayName
。在后者中,所有
Animal
实例都可以访问相同的
sayName

function Animal(name,numLegs){
    this.name = name;
    this.numLegs = numLegs;
    this.sayName = function(){
         console.log("Hi my name is " + this.name);
    };
}

var dog = new Animal(4, "Jack");
var alligator = new Animal(4, "Snap");

dog.sayName = function(){ console.log("woof"); }

dog.sayName();
alligator.sayName();
将导致

woof
Hi my name is Snap

因为
dog
alligator
不共享相同的函数
sayName
,而在后一个示例中,对原型的更改将更改
sayName

的所有调用,这是不一样的,因为第一个版本将使用更多内存,像以往一样,
Animal
的实例也有自己的
this.sayName
。在后者中,所有
Animal
实例都可以访问相同的
sayName

function Animal(name,numLegs){
    this.name = name;
    this.numLegs = numLegs;
    this.sayName = function(){
         console.log("Hi my name is " + this.name);
    };
}

var dog = new Animal(4, "Jack");
var alligator = new Animal(4, "Snap");

dog.sayName = function(){ console.log("woof"); }

dog.sayName();
alligator.sayName();
将导致

woof
Hi my name is Snap

因为
dog
alligator
没有相同的功能
sayName
,在后一个示例中,对原型的更改将更改对
sayName

的所有调用,但最好将原型用于共享资源

最好将原型用于共享资源

这个问题已经得到了回答-这取决于具体情况。阅读以下答案:

如果您的方法需要访问构造函数的私有变量,那么除了在构造函数中定义它之外,您别无选择。否则,您应该始终在
prototype
对象上声明它们

您还应阅读以下文章:


  • 这个问题已经得到了回答——这取决于具体情况。阅读以下答案:

    如果您的方法需要访问构造函数的私有变量,那么除了在构造函数中定义它之外,您别无选择。否则,您应该始终在
    prototype
    对象上声明它们

    您还应阅读以下文章:


  • 陷阱的可能重复可能是如果你在原型中使用普通对象——它们可能会意外地从一个实例变异到另一个实例。陷阱可能是如果你在原型中使用普通对象——它们可能意外地从一个实例变异到另一个实例。