如何以变量的形式调用匿名方法并访问其属性和方法



我读过,我们可以调用一个匿名函数作为一个变量。然而,我正在尝试这样做,除此之外,我还想访问它的属性和方法。这是我的代码

var cooking = function(){
        this.dessert = "Ice Cream";
        this.numberOfPortions = 20;
        this.doubleLunch = function(){this.numberOfPortions = 40;
            document.write(this.numberOfPortions);};
        };
document.write(cooking.dessert);

但是我什么也没得到。你能告诉我我做错了什么吗?由于

cooking为函数。当你调用它时,它定义了许多关于this的属性。

该结构意味着它打算用作构造函数,因此您可以使用new关键字创建它的实例。

然后你可以与实例交互。

var meal = new cooking();
document.write(meal.dessert);

注意:惯例规定构造函数(且只有构造函数)应该以首字母大写开始命名,因此您应该将其重命名为Cooking。

当函数作为构造函数调用时,this引用自身,您可以通过使用立即调用的函数表达式(IIFE)来实现。

var cooking = (function () {
    return new function () {
        this.dessert = "Ice Cream";
        this.numberOfPortions = 20;
        this.doubleLunch = function () {
            this.numberOfPortions = 40;
            document.write(this.numberOfPortions);
        };
    }
})();
document.write(cooking.dessert);

演示:http://jsfiddle.net/fk4uydLc/1/

但是,您可以通过使用普通的旧JavaScript对象(POJO)来实现相同的结果。

var cooking = (function () {
    var obj = {};
    obj.dessert = "Ice Cream";
    obj.numberOfPortions = 20;
    obj.doubleLunch = function () {
        obj.numberOfPortions = 40;
        document.write(obj.numberOfPortions);
    };
    return obj;
})();
document.write(cooking.dessert);

演示:http://jsfiddle.net/vmthv1dm/1/

如果你打算多次使用构造函数,那么@Quentin提到的方法是可行的。

function Cooking() {
    this.dessert = "Ice Cream";
    this.numberOfPortions = 20;
    this.doubleLunch = function () {
        this.numberOfPortions = 40;
        document.write(this.numberOfPortions);
    };
}
var cooking = new Cooking();
document.write(cooking.dessert);

演示:http://jsfiddle.net/jsd3j46t/1/

相关内容

  • 没有找到相关文章

最新更新