如何从调用父属性的对象方法调用函数

时间:2015-04-24 04:21:06

标签: javascript

        function myFunc() {
        omaps: function tes() {
            return this.parent.x + this.parent.y;
        }
    }

    var myobj = {
        x: 1,
        y: 2,
        z: myFunc()
    }

    window.alert(myobj.z);

返回undefined

        function myFunc() {
        omaps: function tes() {
            return myobj.x + myobj.y;
        }
    }

    var myobj = {
        x: 1,
        y: 2,
        z: myFunc()
    }

    window.alert(myobj.z);

返回undefined

        var myobj = {
        x: 1,
        y: 2,
        z: {
            omaps: function() {
                return myobj.x + myobj.y;
            }
        }
    }

    window.alert(myobj.z);

返回[object,Object]

从上面的片段中我得到一个带有undefined或[object,Object]而不是值3的返回。

如何返回我预期的值?我做对还是错?

2 个答案:

答案 0 :(得分:0)

在前两个示例中,您得到 undefined ,因为分配给 myobj.z 的值是调用 myFunc 的结果。

该函数没有return语句,因此返回 undefined ,这是分配给 myobj.z 的值。

在第三个示例中,您要将对象分配给 myobj.z ,因此您会看到调用从 Object继承的 toString 方法的结果构造函数(即Object.prototype上的那个),返回'[object Object]'

您可能想要做的是:

// Function assumes *this* will be set in the call
function myFunc() {
    return this.x + this.y;
}

var myobj = {
    x: 1,
    y: 2,
    z: myFunc  // note assignment, no ()
}

window.alert(myobj.z());  // Note *this* must be set in the call and z must be called

您还可以使用getter(在现代浏览器中支持):

var myobj = {
    x: 1,
    y: 2,
    get z(){
      return this.x + this.y;
    }
}

window.alert(myobj.z)  // 3

答案 1 :(得分:0)

您可以将该功能分配给myobj.z并使用this.xthis.y来获取属性并通过调用myobj.z()来获取值

function myFunc() {
        return this.x + this.y;
    }

    var myobj = {
        x: 1,
        y: 2,
        z: myFunc
    }

    window.alert(myobj.z());

另一种方法是传递函数中的对象以获取属性并将返回值分配给myobj.z,如下所示

function myFunc(obj) {
        return obj.x + obj.y;
    }

    var myobj = {
        x: 1,
        y: 2,
        z: myFunc(myobj)
    }

    window.alert(myobj.z);