2013-03-24 33 views
0

我承认我在徘徊,将不同作者的代码拼凑在一起,试图找出javascript原型。使用原型模式在JavaScript类中保存实例值

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

这是我正在尝试的,实质上。这是和那儿剽窃从网上修改:

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

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

...的所有的点,所以我可以调用的MyGlobe实例的setup方法和设置variable1正确:

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

//aGlobe.variable1 is 33 now 

这实际上似乎工作,但我不知道为什么原作者这样做的东西?例如,开头的self.variable1位有什么意义?

它是最好打字:

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

我还以为你会做这样的事情self=this,如果你认为你的类将在例如一个回调函数中使用,但不会出现在这里的情况? (高兴地显示错误。)

我不确定最佳做法是什么在这里,想知道更多。

+1

是的,围绕此代码有很多不必要的东西。要么它在修改之前是有意义的,要么你不应该像这样使用它:-) – Bergi 2013-03-24 23:19:46

+0

“*是否最好输入'MyGlobe.prototype.variable1;'*” - 究竟是什么?如果你指的是'self.variable1',它们就不一样了。 – Bergi 2013-03-24 23:22:25

+0

我的意思是'最好输出...' - 在构造函数中声明实例变量('self.variable1')更好,而不是将它们添加到原型中。 – larryq 2013-03-25 01:03:35

回答

1

这实际上似乎工作,但我不知道为什么原作者这样做的东西?例如,开头的self.variable1位有什么意义?

无(使用self),在“实例属性的声明”(即使只有其中初始化到null)可以帮助引擎使用内存更高效的内部结构 - 尽管它不是真的有必要。

我还以为你会做self = this这样的事情,如果你认为你的类将被用在回调函数中,但是在这里并不是这样的情况?

没错。这个小片段真的应该重写

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

是更好地申报,而不是将它们添加到原型(MyGlobe.prototype.variable1)构造函数(self.variable1)的实例变量?

这很简单。在原型上,它不再是实例属性。并请变量(如self - 这是本地作用域的功能)区分和性质(如prototypesetupvariable1 - 这是在对象上的“公共”)。

相关问题