2014-02-28 59 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