Javascript 原型-向类添加函数
我现在正在学习原型。将函数“sayName”放在类中还是稍后通过原型添加它更好?还是相同,取决于具体情况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
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
对象上声明它们
您还应阅读以下文章:
陷阱的可能重复可能是如果你在原型中使用普通对象——它们可能会意外地从一个实例变异到另一个实例。陷阱可能是如果你在原型中使用普通对象——它们可能意外地从一个实例变异到另一个实例。