2013-06-28 122 views
2

我有一個對象,它有一個使用屬性的方法。我是否正確使用屬性?將js對象的屬性傳遞給它的方法

function TestObject(words) { 
    this.words = words; 

    function alertStuff() { 
    console.log(this.words); 
    } 
} 

doItPlease = new TestObject('say something!'); 
doItPlease.alertStuff(); 

回答

4

屬性和變量在JavaScript中是不同的。

this.alertStuff = function() { 
    console.log(this.words); 
} 

您示例中的this保存對新對象的引用。構造函數中的任何參數/變量都與該對象沒有直接關係。


更習慣的是將函數添加到通用原型對象而不是每個實例。

TestObject.prototype.alertStuff = function() { 
    console.log(this.words); 
} 

該如何工作原理是,當你做doItPlease.alertStuff()thisalertStuff值被自動設置爲doItPlease對象。因此,alertStuff()方法可以訪問該對象及其所有屬性。

因爲您從TestObject構造函數創建的所有實例在其原型鏈中都有相同的TestObject.prototype對象,所以內存開銷較少,因爲它們都共享相同的函數。

+0

非常感謝,這更清晰!是否可以在對象定義的大括號內定義一個方法?我不想讓一個代碼塊定義我的對象,另一個代碼塊擴展它的原型:) –

+0

@DonnyP:我不確定你說的對象定義的大括號是什麼意思。這裏唯一的花括號定義了函數體。而且我不確定你定義對象的代碼塊是什麼意思,另一個擴展了原型。你能解釋一下你想避免的嗎? –

+0

@DonnyP是的,這是可能的。這被稱爲封閉。閉包內部的函數僅在該範圍內可用。 – Tamillharasan