2014-02-28 110 views
0

比方說,我有一個對象具有返回對象本身的方法。在JavaScript中返回對象

var mystate = { 
    init: function() { 
     return this; 
    }, 
    run: function() { 
     console.log("!"); 
    } 
} 

然後我運行此代碼: 「!」

var status = mystate.init(); 
mystate.run(); 
status.run(); 

在Firefox這樣做打印兩在控制檯的跡象,但不知何故,在Chrome它打印的第一個,但我得到一個錯誤,

Uncaught TypeError: Object [object Object] has no method 'run'

當它運行status.run()

似乎狀態是不確定的,當我在Chrome運行status.run(),但不是在Firefox瀏覽器。

那麼......爲什麼是這樣,我怎麼能讓一個對象返回自己?

+0

不能說'return this;',因爲'this'指向'window'對象 – Mouseroot

+0

我在Windows 7的Chrome版本33.0.1750.117 m上運行,它似乎按預期工作。你使用的是什麼版本的Chrome? http://jsfiddle.net/KpfWh/ – Mathias

+2

@Mouseroot這是不對的。在作爲對象成員的函數中,'this'確實指向對象。見https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/這個#As_an_object_method – Nevett

回答

5

您不能設置status像這樣因爲你真的設定window.status,這必須是字符串

因此status成爲字符串"[object Object]"(即您鑄造對象字符串的結果),以及字符串實例沒有一個叫run方法,讓你得到一個錯誤。

+2

而且之所以這樣jsFiddle演示的工作是代碼在'onload'處理程序中運行,所以'var'是本地的。好找! –

+0

好吧,似乎將代碼封裝在某個東西里解決了這個問題。 – PixelRobot