2014-01-10 26 views
0

說我有下面的代碼:整潔的方式來處理JavaScript中的這種繼承代碼?

function MyObject() { 
    EventTarget.call(this); 
} 
MyObject.prototype = new EventTarget(); 
MyObject.prototype.constructor = MyObject;  
MyObject.prototype.foo = someFunction; 
MyObject.prototype.bar = someOtherFunction 

有一個整潔的方式,以避免在每一行定義MyObject.prototype.something = something

我必須定義兩個對象併合並它們嗎?還是有一些更乾淨的方式來做同樣的事情?

回答

0

聲明控制器內部的函數,您不必將它們附加到原型。這是你以後的事嗎?

function EventTarget() { 
    this.baz = function() {console.log("baz")}; 
    this.foobar = "foobar"; 
} 

function MyObject() { 
    EventTarget.call(this); 

    this.foo = function() {console.log("foo")}; 
    this.bar = function() {console.log("bar")}; 
} 
MyObject.prototype = new EventTarget(); 
MyObject.prototype.constructor = MyObject;  

thisObject = new MyObject(); 

thisObject.foo(); // outputs 'foo' 
thisObject.bar(); // outputs 'bar' 
thisObject.baz(); // outputs 'baz' via inheritance 
console.log(thisObject.foobar); // outputs 'foobar' via inheritance 

http://jsfiddle.net/kFUDy/

見這個答案提到的各個環節:Extending an Object in Javascript

+0

有到把共享的成員,你聲明他們作爲具體實例時松原型的優勢。函數foo和bar不會更改每個實例,但每個實例都有一個。 http://stackoverflow.com/a/16063711/1641941 – HMR

相關問題