首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript对象引用

JavaScript对象引用
EN

Stack Overflow用户
提问于 2012-01-12 23:46:59
回答 4查看 5.8K关注 0票数 4

我对Javascript对象文字有一个问题。

我想在其中一个函数中引用该对象:

代码语言:javascript
复制
var Obj = {
    name : "Johnny",
    dumb : function() {
        alert(this.name);
    }
}

遗憾的是,"dumb“函数也是一个对象。因此,由于dumb()没有'name‘属性,它将作为未定义返回。

我该如何解决这个问题呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-01-12 23:48:56

dumb是Obj对象上的一个方法。当被调用时,this将被设置为Obj,并将警告"Johnny“

Try it out

代码语言:javascript
复制
var Obj = {
    name : "Johnny",
    dumb : function() {
        alert(this.name);
    }
}

Obj.dumb();
票数 8
EN

Stack Overflow用户

发布于 2012-01-12 23:49:44

您的代码很好。对dumb的调用应该是:

代码语言:javascript
复制
Obj.dumb(); // "Johnny"

JavaScript中的this完全由函数的调用方式定义,而不是由函数的定义位置定义。如果通过对象属性调用函数,则在调用中this将引用该对象。举个例子,如果你这样做:

代码语言:javascript
复制
var f = Obj.dumb;
f(); // "undefined"

你会得到undefined (嗯,很可能),因为你还没有为this设置任何特定值。在没有特定值的情况下,使用全局对象。(浏览器上的window。)

您还可以使用this函数的callapply功能来设置JavaScript:

代码语言: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);。)

更多阅读:

票数 6
EN

Stack Overflow用户

发布于 2012-01-12 23:51:49

我想我忽略了这里的问题。您的代码运行良好。

代码语言:javascript
复制
var Obj = {
    name : "Johnny",
    dumb : function() {
        alert(this.name);
    }
}
Obj.dumb();  // Alerts 'Johnny'

这是因为在设置为thisObj上调用dumb

编辑:如果您执行了以下操作,它将是undefined

代码语言:javascript
复制
var x = Obj.dumb;
x(); // Alerts ''

这是因为this现在是window (因为不再在Obj上调用该函数)。

你必须选择.call

代码语言:javascript
复制
var x = Obj.dumb;
x.call(Obj); // Alerts 'Johnny'

或者.bind (ECMAScript 5,仅指现代浏览器):

代码语言:javascript
复制
var x = Obj.dumb.bind(Obj);
x.call(); // Alerts 'Johnny'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8837905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档