我通常在JavaScript中創建「類」內而外使用簡單defclass
功能:
function defclass(prototype) {
var constructor = prototype.constructor;
constructor.prototype = prototype;
return constructor;
}
此功能允許我如下創建類:
var MyClass = defclass({
constructor: function() {},
sayHi: function() {
alert("hi");
}
});
這種方法有以下優點:
- 所有原型pr operties封裝在單個對象文字中。
constructor
函數本身只是另一個原型屬性。
- 實例始終具有正確的
constructor
屬性。
例如:
var o1 = new MyClass;
alert(o1 instanceof MyClass); // true
alert(o1.constructor === MyClass); // true
你也可以很容易地修改defclass
支持繼承:
function defclass(uber, body) {
var base = uber.prototype;
var prototype = Object.create(base);
var constructor = body.call(prototype, base), prototype.constructor;
constructor.prototype = prototype;
return constructor;
}
然後,您可以使用它,如下所示:
var Rectangle = defclass(Object, function() {
this.constructor = function (width, height) {
this.height = height;
this.width = width;
};
this.area = function() {
return this.width * this.height;
};
});
繼承是也很簡單:
var Square = defclass(Rectangle, function (base) {
this.constructor = function (side) {
base.constructor.call(this, side, side);
};
});
一切正常:
var sq = new Square(5);
alert(sq.area()); // 25
alert(sq instanceof Square); // true
alert(sq instanceof Rectangle); // true
alert(sq.constructor === Square); // true
這是所有鄉親。
'構造函數'應該是不可枚舉的。 – SLaks