2013-08-06 47 views
0

這是我無法解決的問題。我有一個對象叫做Person。我爲它添加了一個方法,名爲changeCol(el,col)它需要兩個參數,一個是對元素的引用,另一個是te顏色屬性。所以當我們調用這個方法時,這會改變元素的顏色。現在我附加了一個新方法,該對象叫做changeSize(size);。它需要一個名爲(size)的參數。現在的疑問是,當我將第二種方法稱爲元素時,我想改變顏色並增加字體大小。javascript從另一個函數繼承屬性

在第一種方法中,我得到了元素的引用並更改了顏色。所以,同樣的事情,我不想在第二種方法中重複。那麼,如何將第一個方法參數繼承到第二個方法。

這是迄今爲止碼 -

function Person(){ 

} 
Person.prototype.changeCol = function(el, col){ 
    var elem = document.getElementById(el); 
    elem.style.color = col; 
}; 

Person.prototype.changeSize = function(size){ 

}; 



//here we are calling the method 
var foo = new Person(); 
foo.changeCol('paragraph', 'blue');// this is working fine. 
foo.changeSize('45px'); // this method will change the size and color as well. 
+0

'changeSize()'方法會在某個時候獨立於'changeCol()'函數調用,還是會一直調用? –

+0

當'Person'屬性沒有做任何事情時,使用'changeCol()'成爲'Person'原型的方法有什麼意義? – nnnnnn

+0

我想調用changeSize()方法分離。但它也會改變顏色。所以可能會在changeSize方法內執行changeCOlor方法。 –

回答

0

當您使用this.elem創建人或檢查ELEM設置可以設置ELEM。

function Person(elemID){ 
    // could set the elem here 
    this.elem=false; 
} 
Person.prototype.changeCol = function(el, col){ 
    this.elem = this.elem || document.getElementById(el); 
    this.elem.style.color = col; 
}; 
Person.prototype.changeSize = function(size){ 
    this.elem = this.elem || document.getElementById(el); 
    ... 
}; 
+0

好的,讓我試試。 –

+0

當您調用changeSize()時,預期會發生什麼顏色?這個解決方案對此沒有幫助。 – djna

0

也許我在這裏失去了一些東西,但我沒有看到你如何期待這工作。

var person1 = new Person(); 
person1.setSize("45px"); // what should color be set to? 

var person2 = new Person(); 
person2.changeColor("p1", green); 

var person3 = new Person(); 
person3.setSize("45px"); // what us your intention now? 

函數根本不會相互繼承。如果要爲所有實例的el和color設置默認值,請將它們設置爲原型屬性。

+0

好的,這是疑問。在person2對象中,您稱爲changeColor(),因此它會更改顏色。但是我想要的是在person1對象中,當我們調用setSize(size)時,這個方法也會改變字體大小和顏色。 –

+0

對,但我們怎麼能知道人1的預期顏色?我們從來沒有爲任何事物設置任何顏色。我不相信你有一個明確的要求。我在上面的例子中有兩個明確的問題,告訴我你打算做什麼 – djna