使用原型的javascript对象声明(包括case)

时间:2011-02-18 10:03:14

标签: javascript

  

可能重复:
  Use of 'prototype' vs. 'this' in Javascript?

我不知道为什么有些开发人员会完全使用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());

2 个答案:

答案 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这些之间没有区别