JavaScript对象引用

Joh*_*arr 4 javascript

我遇到了Javascript对象文字的问题.

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

var Obj = {
    name : "Johnny",
    dumb : function() {
        alert(this.name);
    }
}
Run Code Online (Sandbox Code Playgroud)

可悲的是,"哑"功能也是一个对象.因此,由于dumb()没有'name'属性,因此它将返回undefined.

我该如何解决这个问题?

Ada*_*kis 8

dumb是你的Obj对象的一个​​方法.被叫时,this将被设置为Obj,并将警告"约翰尼"

试试看

var Obj = {
    name : "Johnny",
    dumb : function() {
        alert(this.name);
    }
}

Obj.dumb();
Run Code Online (Sandbox Code Playgroud)


T.J*_*der 6

你的代码很好.致电dumb应该是:

Obj.dumb(); // "Johnny"
Run Code Online (Sandbox Code Playgroud)

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

var f = Obj.dumb;
f(); // "undefined"
Run Code Online (Sandbox Code Playgroud)

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

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

var f = Obj.dumb;
f.call(Obj); // "Johnny"
Run Code Online (Sandbox Code Playgroud)

call(和apply)的第一个参数是要用作的对象this.(有了call,任何后续的参数都会传递给函数,所以f.call(Obj, 1);实际上也是如此Obj.dumb(1);.有了apply,第二个参数是一个用作函数参数的数组,所以f.apply(Obj, [1]);实际上也是如此Obj.dumb(1);.)

更多阅读: