在js中使用嵌套函数和点运算符

时间:2014-07-24 15:39:30

标签: javascript function object

嘿,伙计们是javascript应用程序开发的新手。我的代码

var obj = {
    models: "AN",
    collection: {},
    person: {},

    changeDetails: function(values, babes) {
        obj.person.name = values.name;
        obj.person.age = values.age;
    }

    babe: function() {
        return 5;
    }
};

当我像obj.changeDetails({name:"George",age:20}).babe());一样打电话时,它会引发我Uncaught SyntaxError: Unexpected identifier

之类的错误

是否有可能在javascript中调用objectname.functionname.().anotherfunctionname()?如果可能,请将其发布为显示其演示的答案..

由于

6 个答案:

答案 0 :(得分:3)

您遇到2个语法错误和1个逻辑错误

您在

之后缺少逗号(,
changeDetails: function (values, babes) {
    obj.person.name = values.name;
    obj.person.age = values.age;
}

所以它应该是

var obj = {
   models: "AN",
    collection: {},
    person: {},
    changeDetails: function(values, babes) {
        obj.person.name = values.name;
        obj.person.age = values.age;
    },
    babe: function() {
        return 5;
    }
};

此外,在

之后你有一个太多的右括号()
obj.changeDetails({name:"George",age:20}).babe());

应该是

obj.changeDetails({name:"George",age:20}).babe();

最后,为了能够调用对象的方法babe,您必须在changeDetails函数中返回它,在此上下文中使用this是有意义的。

最终解决方案

var obj = {
    models: "AN",
    collection: {},
    person: {},

    changeDetails: function(values, babes) {
        this.person.name = values.name;
        this.person.age = values.age;
        return this;
    },
    babe: function() {
        return 5;
    }
};
obj.changeDetails({name:"George",age:20}).babe();

答案 1 :(得分:2)

您只想返回this

changeDetails: function(values, babes) {
    obj.person.name = values.name;
    obj.person.age = values.age;
    return this;
},

答案 2 :(得分:1)

changeDetails不会返回任何内容。你什么都不能打电话给.babe()

var obj = {
    models: "AN",
    collection: {},
    person: {},

    changeDetails: function(values, babes) {
        obj.person.name = values.name;
        obj.person.age = values.age;

        return obj;
    },

    babe: function() {
        return 5;
    }
};

现在你可以链接东西,因为changeDetails返回一个对象:

obj.changeDetails({name:"George",age:20}).babe();

答案 3 :(得分:0)

这是chaining,您必须在每个方法中返回obj

var obj = {
    models: "AN",
    collection: {},
    person: {},
    changeDetails: function (values, babes) {
        obj.person.name = values.name;
        obj.person.age = values.age;
        return obj;
    },
    babe: function () {
        return 5;
    }
};

答案 4 :(得分:0)

是的,很有可能。您只需要以这样的方式设计您的功能,即它们允许链接功能。例如,

changeDetails: function(values, babes) {
    obj.person.name = values.name;
    obj.person.age = values.age;
    return obj;                            # Return the `obj`
},

现在,函数调用changeDetails的结果是obj,现在有babe函数。所以,你可以像这样调用它

obj.changeDetails({
    name: "George",
    age: 20
}).babe();

另请注意,您不能在babes函数中使用第二个参数changeDetails。所以,您可以删除该参数。

答案 5 :(得分:0)

我必须说,如果您分配宝贝状态,您至少应该像这样返回8 - 10 - 您还需要在更改细节中返回obj。

var obj = {
    models: "AN",
    collection: {},
    person: {},

    changeDetails: function(values, babes) {
        obj.person.name = values.name;
        obj.person.age = values.age;
        return obj;
    }

    babe: function() {
        return Math.floor((Math.random()*(10-8+1)+8))
    }
};