什么用构造函数像这样的好处是:在JavaScript对象中使用构造函数的优点是什么?
var MyLibrary = new function(){
var self = this;
self.MyLibrary = function(){
// init code
}
}
不是简单对象内部编写代码?
var MyLibrary = new function(){
// init code
}
什么用构造函数像这样的好处是:在JavaScript对象中使用构造函数的优点是什么?
var MyLibrary = new function(){
var self = this;
self.MyLibrary = function(){
// init code
}
}
不是简单对象内部编写代码?
var MyLibrary = new function(){
// init code
}
这些都不是很正确,虽然第二个可能工作,但不是真正的对象,更像是一个单身(但以一种奇怪的方式)。这里是一个构造函数的类的实例:
// Class & Constructor definition
function Rectangle(w,h) {
this.width = w;
this.height = h;
}
// Now your class methods go on the prototype object
Rectangle.prototype.area = function() {
return this.width * this.height;
}
我们使用这个类:
var myRect = new Rectangle(3,4);
myRect.area();
您也可以使用匿名函数保存“构造”的变种,而不是定义一个类命名函数:
// Class & Constructor definition
var Rectangle = function(w,h) {
this.width = w;
this.height = h;
}
// Now your class methods go on the prototype object
Rectangle.prototype.area = function() {
return this.width * this.height;
}
好吧,如果你使用原型继承来创建新的类,你会做这样的事情:
function MyBaseClass() {
// common stuff here
}
function MySubClass() {
// subclass-specific stuff here
}
MySubClass.prototype = new MyBaseClass();
最后一行需要建立继承链。但是,它也有执行MyBaseClass
主体的副作用,这可能会导致问题(特别是如果MyBaseClass
函数需要参数)。
如果你不希望这样的事情发生,做这样的事情:
function MyBaseClass() {
this.init = function() {
// initialisation stuff here
}
// common stuff here
}
function MySubClass() {
// subclass-specific stuff here
this.init();
}
MySubClass.prototype = new MyBaseClass();
在init
的初始化代码,当你创建的MySubClass
一个实例现在只能执行。
甚至可以在第一种情况下运行init代码吗?看起来你不是在调用这个函数(不管那是什么)。它不像通常在javascript中做的那样是传统的“构造函数”。 – Kekoa 2009-06-19 07:04:21