2015-04-06 24 views
2

如果我宣佈樣如何使用元素與對象屬性一樣element.myobj.prop

var obj =function(element){ 
return{ 
wide:element.clientWidth 
}} 

一個對象,我必須聲明它像

var fdiv=new obj(document.etc.etc.); 

,並呼籲像

fdiv.wide; 

但這是相當限制我的代碼。我必須爲每個元素聲明新的obj。 我的問題是我如何設置元素名稱動態,以便能夠使用像nodeI_want.obj.wideobj.nodeI_want.wide或類似的東西來使用我的屬性與動態給定的節點。 注意:clientWidth道具。只是一個例子來澄清它將被我的代碼替換爲我自己的屬性。

+0

我不明白,爲什麼'wide'是元素的屬性,爲什麼你需要它,如果它和'clientWidth'屬性一樣? – adeneo

+0

這只是一個例子,它可以是任何東西 – nikoss

+0

你發佈的內容是無效的代碼,它沒有任何意義,至少不是我? – adeneo

回答

1

您似乎想要擴展HTMLElement。正確的方法是將您的方法添加到HTMLElementprototype

例如(我沒有因爲它是相當含糊它試圖實現使用原來的功能代碼):

HTMLElement.prototype.getMyWidth = function() { 
    return this.clientWidth; 
}; 

HTMLElement

+0

這正是我想要的,你可以解釋一下,爲什麼我們使用原型,以及如何回憶這個 – nikoss

+0

這就是我們大多數人會盡量避免的,擴展本地構造函數/原型。 – adeneo

+0

@adeneo,我在思考是否引用這項技術的評論家。然而,從純粹的JS角度來看(無論DOM和瀏覽器如何),這是一個更好的方法,希望能夠以正確的方式領導OP。 – haim770

1
function ElementObj(element){ 
    this.element = element; 
    this.width = this.element.offsetWidth; 

    return this; 
} 

現在你可以這樣做:

var elem1 = new ElementObj(document.getElementById('div1')); 
var elem2 = new ElementObj(document.getElementById('div2')); 

其中elem1返回對象:

{ 
    element: DOMElement 
    width: 100 
} 
相關問題