2011-02-18 22 views
0

可能重复JavaScript对象声明:
Use of 'prototype' vs. 'this' in Javascript?使用原型(包括大小写)

我DONOT知道为什么一些开发商利用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()); 
+1

重复:http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript – 2011-02-18 10:09:02

+0

不好意思啊,我没抓住〜 – 2011-02-18 10:20:30

回答

0

AFAIK有这样的人

+1

你知道错了我的亲爱的朋友 - http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript时间赶上语言背后的基本面! :) – 2011-02-18 10:22:02

1

是的,是有区别的没有什么区别。使用prototype,您的属性或方法在对象中声明一次,而在所有实例中声明相同。使用直接的属性/方法,这些属性和方法被添加到对象的每个实例。因此,这里是你的车的构造:

function Car(){this.engine = 'no known engine'}; 
Car.prototype.setEngine = function(val){ 
    this.engine = val; 
} 

现在的方法setEngine等于你的车的所有实例,但engine属性可以每个实例变化。原型方法定义一次,并通过原型链查找(see also this)。在这种情况下,setEngine的'引擎'属性设置为您的汽车的当前实例。所以,你可以这样做:

var bmw = new Car, merc = new Car; 
bmw.setEngine('BMW'); 
merc.setEngine('Mercedes'); 
console.log(bmw.engine); //=> 'BMW' 
console.log(merc.engine); //= 'Mercedes'