0

我承认我四处乱窜,将不同作者的代码拼凑在一起,试图找出 javascript 原型。

我是原型概念的新手,希望在我的类中有一些可以使用方法修改的实例变量。

本质上,这就是我正在尝试的。这是从网上抄袭和修改的:

var MyGlobe = function () {
    var self = this;
    self.variable1 = null;
    return self;
}

MyGlobe.prototype = function () {
    var setup = function () {
        this.variable1 = 33;
    };
     return {
        setup:setup
    };
 }();

...所有这一切的重点是我可以setup在实例上调用该方法MyGlobevariable1正确设置:

var aGlobe = new MyGlobe();
aGlobe.setup();

//aGlobe.variable1 is 33 now

这实际上似乎有效,但我不确定原作者为什么这样做?例如,self.variable1开头的位有什么意义?

是否最好输入:

MyGlobe.prototype.variable1;
MyGlobe.prototype.variable2;
//....

我还认为如果您认为您的类将在回调函数中使用,您会做类似的事情self=this,但这里似乎不是这种情况?(很高兴被显示错误。)

我不确定这里有哪些最佳实践,并想了解更多。

4

1 回答 1

1

这实际上似乎有效,但我不确定原作者为什么这样做?例如,开头的 self.variable1 位有什么意义?

无(用于 using self),“实例属性声明”(即使只是将它们初始化为null)可以帮助引擎使用内存效率更高的内部结构——尽管这并不是真正必要的。

例如,如果您认为您的类将在回调函数中使用,我还认为您会执行类似 self=this 的操作,但这里似乎并非如此?

确切地。这个小片段真的应该重写为

var MyGlobe = function () {
    this.variable1 = null;
}
MyGlobe.prototype.setup = function() {
    this.variable1 = 33;
};

在构造函数 ( self.variable1) 中声明实例变量而不是将它们添加到原型 ( MyGlobe.prototype.variable1) 中是否更好?

这很简单。在原型上,它不再是实例属性。并且请区分变量(比如self- 是函数的局部范围)和属性(比如prototype,setupvariable1- 在对象上是“公共的”)。

于 2013-03-25T14:54:01.133 回答