2012-01-26 85 views
2

也許這是一個瘋狂的問題,但這樣的:

var MyPrototypeObject { 
    prop: 0; 
};  
var ob1 = Object.create(MyPrototypeObject); 
var ob2 = { 
    meth: function() { 
     this.prop = 5; // update prop 
     return this.prop; 
    } 
}; 

其中Object.create克隆原型和$.extend用於額外的方法添加到ob1,其中this.prop點回原型?添加新方法的最佳方式是什麼?

$.extend(ob1, ob2); 

相關:Override Methods with Prototypal Inheritance

回答

1

pd-style是類似的,建議

var SomeProto = { 
    prop: 0; 
};  

var ob1 = extend(Object.create(SomeProto), { 
    meth: function meth() { 
     return (this.prop = 5); // update prop 
    } 
}); 

這是在JavaScript處理OO的有效途徑。請注意,$.extend是一個這樣做的狗屎實施,因爲它有一個isPlainObject檢查,它返回false對象有原型

+0

地獄呀! =]在該設置中,你可以在'SomeProto'中使用'this'嗎?除了當我嘗試在'SomeProto'的方法中使用'this'時,我得到了它的工作。我不應該這樣做嗎? – ryanve

+0

@ryanve當然。請注意'SomeProto'裏面的'This!== SomeProto',它是你在調用方法時傳入的任何'this'上下文。 – Raynos

+0

大,是的,這就是我想要的。我必須在其他地方犯錯。 – ryanve