我不知道为什么有些开发人员会完全使用javascript原型对象。 所以,我在下面做了一个示例代码。 一个使用原型对象,另一个使用普通语法。 有什么区别btwn其中两个? 使用原型语法有什么好处,第一种情况?
Car.prototype.engine_ = 'bmw';
Car.prototype.getEngine = function(){
return this.engine_;
}
Car.prototype.setEngine = function(engine){
this.engine_ = engine;
}
function Car(){
//....
}
var myCar = new Car();
myCar.getEngine();
myCar.setEngine('benz');
console.debug(myCar.getEngine());
VS
function Car(){
this.engine_ = 'bmw';
this.setEngine = function(engine){
engine_ = engine;
}
this.getEngine = function() {
return engine_;
}
//...
}
var myCar = new Car();
myCar.getEngine();
myCar.setEngine('benz');
console.debug(myCar.getEngine());
答案 0 :(得分:1)
是的,有区别。使用prototype
,您的属性或方法在Object中声明一次,对所有实例都相同。使用直接属性/方法,这些属性和方法将添加到Object的每个实例中。所以这是你的Car构造函数:
function Car(){this.engine = 'no known engine'};
Car.prototype.setEngine = function(val){
this.engine = val;
}
现在方法setEngine
等于Car的所有实例,但engine
属性可能因实例而异。原型方法定义一次,并通过原型链(see also this)查找。在这种情况下,setEngine
设置您Car的当前实例的'engine'属性。所以你可以这样做:
var bmw = new Car, merc = new Car;
bmw.setEngine('BMW');
merc.setEngine('Mercedes');
console.log(bmw.engine); //=> 'BMW'
console.log(merc.engine); //= 'Mercedes'
答案 1 :(得分:0)
AFAIK这些之间没有区别