我有一個問題。Object getter/setter vs new constructor - 測試結果
我希望您關閉這個狗屎 - 很多人都JavaScript的神 - 但他們寫的Ecmascript3 -
哈哈哈哈 - 如果你不明白的Object.create()做的,然後閉上你的嘴@ LJ_1102! !
我在jsperf.com上做了一個測試,大概有兩種不同的方法來操作一個對象。
請不要跟我討論關於「object.create(p,pr)」和新的Instance()。
Object.create()是簡單代碼的未來和非常簡單。
--->現在的問題不是:我需要的功能和一套原型和構造函數或需要我的Object.create(原型,新的屬性)< ---這是信仰問題
我的問題:爲什麼Chrome和Firefox的結果有很大的不同?
我知道 - 兩個不同的Javascript引擎。然而爲什麼如此不同?
測試:
var obj = { name: "", get getName(){return this.name;}, set setName(x){this.name = x;} }; function func(x){ var that = this; this.name = ""; this.getName = function(){return that.name;}; this.setName = function(x){that.name = x;}; } // Chrome: 1,536,214 ops/sec // Firefox: 302,952 ops/sec var newObj = Object.create(obj); obj.setName = "svenskanda"; obj.getName; // Chrome: 315,572 ops/sec // Firefox: 1,360,496 ops/sec var newObj = new func(); newObj.setName("Alex"); newObj.getName();
在Chrome中,所述的Object.create() - 的getter/setter更快。
而在Firefox中,新的構造函數方法更快。
你能解釋一下嗎?
你的第一個測試是無效的。 – 2014-09-28 00:12:32
請注意,第一個例子中的'obj'將等同於使用'func.prototype'作爲第二個例子。在構造函數中嵌入方法定義將爲每個'new func'爲'getName'和'setName'創建新的'Function'對象。 – 2014-09-28 00:16:16
是的 - 沒關係 - 我會知道什麼時候會有更好的方式 - 爲什麼同樣的任務會如此不同? – svenskanda 2014-09-28 00:28:50