2015-01-07 40 views
0

將局部變量用作對象屬性的引用而不是屬性本身是不好的做法?JavaScript中對象屬性開銷的局部變量引用

function Apple(){ 
    this.type = 'green appale'; 
} 

Apple.prototype.slice = function(){ 
    //Does this create a noticeable overhead? 
    var type = this.type; 

    //slicing action 

} 
+2

它可能是一個非常小的改進,但是在這個時代,對於世界上越來越複雜的JavaScript運行時間的猜測毫無意義。 – Pointy

+2

它沒有任何必然的錯誤。請注意'type'是'this.type'的一個*拷貝,而不是對它的引用。每個可以修改而不會影響其他。 –

+0

這只是一個副本,因爲字符串在JS中是不可變的。如果'this.type'是一個對象或數組,那麼它就是一個引用。 – Sukima

回答

0

答案是肯定和否。從演出的角度來看,不要擔心。與其他性能問題相比,這是一個蛋糕走路。除了經驗法則之外,還要編寫可讀性代碼,並且只在需要通過事後分析時進行優化。不要預先優化。

至於警告...如果你的值爲節省作爲一個不可變的值(字符串,整型,布爾),那麼你是100%安全的做到這一點。如果它是一個對象或數組,那麼您需要知道它是一個參考,並且變化也會影響變量的原始變量。最後,如果它是一個函數,那麼你必須知道,你會在上面的代碼示例中丟失它的上下文

function foo() {} 

var bar = foo; // Context is irrelevant. 

function foo() { 
    this.baz = 'foobar'; 
} 

var bar = foo; // You must provide a context or `this` becomes `window`. 
+0

感謝您的回答。我知道函數的上下文是調用者。我想到性能差異不會很大,但仍然認爲我可能會錯過一些東西。 – luleksde

+0

你不會錯過任何東西。記憶可能會有一點觸動,但與地球的大小相比,它又是一粒沙子。首先關注代碼的可讀性,不要擔心沙粒。代碼爲人類第一。 – Sukima