2014-09-05 85 views
0

我是新來的原型繼承上的對象,我一直停留在一個簡單的任務創建基於現有對象

我有這樣的事情:

var test1 = { 
     clear : function() { 
     alert('hey'); 
     } 

} 

var test2 = { 
     varB : 2 

} 

我想TEST2從test1延伸。 任何人都可以給我一個方向嗎?我應該仍然使用Object.create,或者可能是一個函數+調用方法? 我在這裏有點困惑。

我發現的每個例子都是基於擴展,然後設置屬性,方法等。但我的對象已經在這裏聲明。

謝謝!

+0

http://javascriptweblog.wordpress.com/2010/ 06/07/understanding-javascript-prototypes/ – tomaroo 2014-09-05 15:23:45

回答

0

一個非常基本的做法是

test2.__proto__ = Object.create(test1) 

所以,你將有test2對象提供clear功能。

+0

[MDN Object.prototype .__ proto__] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/proto):'[...] __proto__屬性已被棄用,不應使用。[.. ]' – 2014-09-05 16:38:08

0

您可以使用prototype來進行繼承。但它只是JavaScript中的一些繼承方式之一。

function test1() {} 
test1.prototype.clear = function() { 
    alert('hey'); 
} 

function test2() {} 
test2.prototype = new test1(); 
test2.prototype.varB = 2; 

var test2Instance = new test2(); 

並自行搜索更多javasrcipt繼承方法。

1

在現代瀏覽器中,你可以使用Object.setPrototypeOf

Object.setPrototypeOf(test2, test1); 

目前還沒有其他(官方)的方式來改變現有對象的原型。

如果你只是創建一個簡單的對象,你可以使用Object.create

var test2 = Object.create(test1); 
test2.varB = 2; // or Object.assign(test2, {varB: 2}); 

如果你實際上並不需要繼承,合併對象與Object.assign將是一種選擇:

Object.assign(test2, test1); 

這只是將test1的屬性複製到test2。與繼承不同,對test1的更改不會影響test2


欲瞭解更多信息,我建議看看