1

我有一个 javascript 闭包和方法内部getresult()。我想调用对象中的一个属性quo

var quo = function (test) {
        talk: function () {
            return 'yes';
        }
        return {
            getresult: function () {
                return quo.talk();
            }
        }
    }
var myQuo = quo('hi');
document.write(myQuo.getresult());

从内部getresult(),我如何调用该属性talk

4

2 回答 2

4

你的语法是错误的,你不能从 quo 引用中调用talk,talk 不能从外部访问,如果你想从 quo 调用talk,那么你必须在返回的对象中添加对它的引用

var quo = function (test) {
    function talk() {
        return 'yes';
    }
    return {
        getresult: function () {
            return talk();
        },
        talk: talk
    }
}
于 2012-07-20T00:20:10.953 回答
0

quo不是对象,而是一个简单的函数,并且没有属性(从技术上讲,它可以有,但在这里不适用)。

var quo = function(test) {
     function talk() {
          return 'yes';
     }
     /* OR:
     var talk = function() {
          return 'yes';
     }; */

     return {
         getresult: function() {
             // in here, "quo" references the closure function.
             // "talk" references the local (function) variable of that "quo" function
             return talk();
         }
     }
}
var myQuo = quo('hi');

myQuo.getresult(); // "yes"

如果你想talk在对象上获得一个属性“” myQuo,你需要使用这个:

var quo = function(test) {
    return {
        talk: function() {
             return 'yes';
        },
        getresult: function() {
             // in here, "quo" references the closure.
             // "this" references current context object,
             // which would be the the object we just return (and assign to "myQuo")
             return this.talk();
        }
    };
}
var myQuo = quo('hi');

myQuo.getresult(); // "yes"

this在 MDN上阅读有关该关键字的更多信息。

于 2012-07-20T00:27:40.210 回答