我对Javascript对象文字有一个问题。
我想在其中一个函数中引用该对象:
var Obj = {
name : "Johnny",
dumb : function() {
alert(this.name);
}
}遗憾的是,"dumb“函数也是一个对象。因此,由于dumb()没有'name‘属性,它将作为未定义返回。
我该如何解决这个问题呢?
发布于 2012-01-12 23:48:56
dumb是Obj对象上的一个方法。当被调用时,this将被设置为Obj,并将警告"Johnny“
Try it out
var Obj = {
name : "Johnny",
dumb : function() {
alert(this.name);
}
}
Obj.dumb();发布于 2012-01-12 23:49:44
您的代码很好。对dumb的调用应该是:
Obj.dumb(); // "Johnny"JavaScript中的this完全由函数的调用方式定义,而不是由函数的定义位置定义。如果通过对象属性调用函数,则在调用中this将引用该对象。举个例子,如果你这样做:
var f = Obj.dumb;
f(); // "undefined"你会得到undefined (嗯,很可能),因为你还没有为this设置任何特定值。在没有特定值的情况下,使用全局对象。(浏览器上的window。)
您还可以使用this函数的call或apply功能来设置JavaScript:
var f = Obj.dumb;
f.call(Obj); // "Johnny"call (和apply)的第一个参数是用作this的对象。(使用call时,任何后续参数都会传递给函数,因此f.call(Obj, 1);实际上应该是Obj.dumb(1);。对于apply,第二个参数是用作函数参数的数组,因此f.apply(Obj, [1]);实际上是Obj.dumb(1);。)
更多阅读:
发布于 2012-01-12 23:51:49
我想我忽略了这里的问题。您的代码运行良好。
var Obj = {
name : "Johnny",
dumb : function() {
alert(this.name);
}
}
Obj.dumb(); // Alerts 'Johnny'这是因为在设置为this的Obj上调用dumb。
编辑:如果您执行了以下操作,它将是undefined
var x = Obj.dumb;
x(); // Alerts ''这是因为this现在是window (因为不再在Obj上调用该函数)。
你必须选择.call
var x = Obj.dumb;
x.call(Obj); // Alerts 'Johnny'或者.bind (ECMAScript 5,仅指现代浏览器):
var x = Obj.dumb.bind(Obj);
x.call(); // Alerts 'Johnny'https://stackoverflow.com/questions/8837905
复制相似问题