[英]Implementing a function to access an object's property versus accessing the property using dot notation, or bracket notation?
回顧一些第三方代碼,我發現編寫了一個函數來獲取對象的屬性。
function getObjectProperty (obj, propertyName) {
var o;
if (obj) {
o = obj[propertyName];
if (o != null) {
if (typeof o == 'function') return o();
}
}
return o;
}
如何調用此函數的一個示例是:
var foo = getObjectProperty(r, 'objProp')
使用此自定義函數來獲取屬性有一些好處,而不僅僅是這樣做:
var foo = r.objProp
要么
var foo = r['objProp']
我只是不了解使用此功能的好處,如果有的話? 我找不到此功能的另一個示例,因此只能假定它是針對此應用程序定制的。 我唯一能看到的是,如果object屬性是一個函數,它將返回一個函數調用,但是即使如此,您也可以編寫:
var foo = r.objProp()
這看起來像一個(非常命名的)實用程序函數,正如您意識到的那樣,它嘗試從對象中獲取屬性的值,但是如果這是一個函數,則返回調用它的結果。
從代碼中不明顯嗎?
如果屬性是一個函數,則此行調用:
if (typeof o == 'function') return o();
盡管它沒有獲得屬性,並且函數沒有執行應有的功能。 getObjectPropertyButIfFunctionInvokeInstead()
更合適的名稱。
這是寫得不好的代碼
簡單的區別。 如果給定像這樣的對象:
var foo = { a: "a", b: function() { return "b" } }
然后foo.b
或foo[b]
給getObjectProperty(foo,"b")
提供不同的結果
它似乎是獲取屬性的實用程序函數,如果它是“ getter”函數,則會自動調用它。 吸氣劑是相當新的,許多較舊的瀏覽器不支持它們(IE直到9才得到它們)。
當然,如果分配給b
的函數返回的是函數而不是值,那么它不會解開包裝,但這大概不是目的。
那么,為什么這會有用呢? 因為吸氣劑很有用。 假設您有一個這樣的對象:
function order(quantity, price) {
this.quantity = quantity;
this.unitPrice = price;
this.totalPrice = function() { return this.quantity * this.unitPrice }
};
var myOrder = new order(10,2);
如果我想查看myOrder
的屬性,那么作為該對象的使用者,我需要知道 totalPrice
是一個函數。 如果我改用getObjectProperty
,則無需關心。 它將做正確的事,而我不必擔心它如何計算totalPrice
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.