方法中的Javascript访问对象属性

方法中的Javascript访问对象属性,javascript,oop,Javascript,Oop,如何正确获取此引用,它返回“foo undefined” 当你这么做的时候 myObject.prototype.myMethod= { foo3:'foo'+this.foo; } this的值是从创建对象的当前上下文计算的,该上下文可能没有foo属性 不确定为什么要调用它myMethod,但要指定一个对象,但如果你真的将它设为一个方法,那么就可以得到正确的foo值 function myObject(){ this.foo="bar" this.foo2=this.myM

如何正确获取此引用,它返回“foo undefined”

当你这么做的时候

myObject.prototype.myMethod=
{
foo3:'foo'+this.foo;
}
this
的值是从创建对象的当前上下文计算的,该上下文可能没有
foo
属性


不确定为什么要调用它
myMethod
,但要指定一个对象,但如果你真的将它设为一个方法,那么就可以得到正确的
foo

function myObject(){
    this.foo="bar"
    this.foo2=this.myMethod();
    alert(this.foo2);
}
myObject.prototype.myMethod= function() {
    return 'foo'+this.foo;
};


'foo'+this.foo
在解析时会立即连接,因此它非常无用(
this
不引用实例)

要在获取对象时获取包含变量的对象,必须使用函数。该函数仅在您调用它时执行,因此
this.foo
引用了正确的值

function myObject(){
    this.foo="bar";
    this.foo2=this.myMethod().foo3;
    alert(this.foo2);
}

myObject.prototype.myMethod = function() {
    return {
        foo3: 'foo'+this.foo
    };
};

好吧,我想可能有更简单的方法it@user1209203:这取决于你觉得什么“简单”。您可以定义一个getter,使您的原始代码成为可能(没有
()
),但实现有点复杂。我只是认为可能会有一个“路由”以某种方式使用普通对象表示法,也可能使用父对象。@user1209203:事实上,getter确实允许某种“路由”-您可以使用
this.myMethod.foo3
处理它们:。好的,谢谢,不过我认为它作为对象内部的函数更整洁
var o = new myObject(); // alerts "foobar", and returns the new object
function myObject(){
    this.foo="bar";
    this.foo2=this.myMethod().foo3;
    alert(this.foo2);
}

myObject.prototype.myMethod = function() {
    return {
        foo3: 'foo'+this.foo
    };
};