if (typeof Object.create !== 'function') {
Object.create = function (o) {
function F() {}
F.prototype = o;
return new F();
};
}
var o1 = {};
o1.init = function(){
alert('o1');
};
var o2 = Object.create(o1);
o2.init = function(){
// how would I call my ancessors init()?
alert('o2');
};
o2.init();
4
A
回答
1
也許這太簡單了你想要完成的任務...將放置o2.init()在o2初始化函數工作?
o2.init = function(){
// how would I call my ancessors init()?
alert('o2');
o1.init();
};
出於好奇,是「ancessors」爲「祖先」或做「ancessors」是指特定的東西在這裏拼寫錯誤?你的意思是o2的「父母」對象?
3
JavaScript函數是對象,有兩個有用的方法來調用函數我的祖先的覆蓋方法:
Function.call(scope, [arg1, ...])
Function.apply(scope, args)
您可以使用一個這些調用父類的實現,明確地傳遞this
爲scope
參數,所以,在父類的實現,this
指子對象:
var o1 = {
name : "One",
init : function() {
alert("o1: " + this.name);
}
};
var o2 = Object.create(o1);
o2.name = "Two";
o2.init = function() {
o1.init.call(this);
alert("o2: " + this name);
};
這會提醒:o1: Two
和o2: Two
。
0
在支持它的瀏覽器,你可以使用Object.getPrototypeOf
功能,像這樣:
o2.init = function(){
Object.getPrototypeOf(this).init.call(this);
alert('o2');
};
這將得到o2
(o1
)的原型,並應用其init
方法本(o2
),就像一個super.init()
在其他語言。
UPDATE:
的Object.getPrototypeOf
功能可以這樣實現:
if (typeof Object.getPrototypeOf !== "function")
{
if (typeof ({}).__proto__ === "object")
{
Object.getPrototypeOf = function(object)
{
return object.__proto__;
};
}
else
{
Object.getPrototypeOf = function(object)
{
// May break if the constructor has been tampered with
return object.constructor.prototype;
};
}
}
相關問題
- 1. Require.JS +骨幹+ 「康樂福」 模型模式
- 2. 在福爾康
- 3. JavaScript的繼承Object.create
- 4. 不能使用的Object.create在JavaScript
- 5. 使用Object.create()繼承JavaScript?
- 6. 福爾康與EGL
- 7. 錯誤:在的Object.create的JavaScript
- 8. 舊的IE的JavaScript Object.create
- 9. 的JavaScript原型的Object.create
- 10. 傳承的Object.create在Javascript
- 11. 的Object.create方法以JavaScript
- 12. 用的Object.create
- 13. 使用的Object.create代替setPrototypeof
- 14. Javascript object.create和isPrototypeOf
- 15. 福爾康上/下和ALL_COMMANDS
- 16. object.create Javascript中的語法用法
- 17. 使用Object.create擴展原生JavaScript對象
- 18. 用Object.create在Javascript中繼承
- 19. 如何使用JavaScript播放音樂?
- 20. 的JavaScript的Object.create - 繼承嵌套屬性
- 21. 的Javascript的Object.create複製參照對象
- 22. 的Javascript原型 - 的Object.create問題
- 23. 的Javascript的Object.create不能在Firefox
- 24. 的Javascript:的Object.create(原型)不工作
- 25. Object.create(null)的用例?
- 26. 使用康康舞
- 27. Javascript Object.create做什麼?
- 28. 如何使用康達
- 29. 如何使用爾康
- 30. 瞭解克羅克福德的Object.create墊片
我不認爲這是進入問題的精神, o2如何知道o1變量的存在。對於任何這種嘗試在Javascript中進行面向對象開發的理解,你不能有這種耦合。 – AnthonyWJones 2009-11-01 21:17:27
當然可以。如果你想調用你的原型的方法實現,你必須知道你的原型。這類似於C++中的類繼承,您必須知道父類才能調用重載方法('ParentClass :: method()')。 – 2009-11-02 08:52:06
我不喜歡這個,就是你在創建o2後添加屬性。當使用new時,您可以在創建實例之前定義父級和子級的構造函數。你怎麼能完成與Object.create相同的? – JohnMerlino 2014-09-01 05:33:50