我想了解这个原型(prototype)。
你们中的任何人都可以阐明
中使用的原型(prototype)之间的区别吗?https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript关联 和 http://www.prototypejs.org/learn/class-inheritance
提前致谢。
最佳答案
没有区别。 Prototype JS 只是一个使 JavaScript 工作更容易的框架。 prototype
属性在这两种情况下都属于被用作构造函数的函数,这只是 JavaScript。
如果您想了解更多有关 JavaScript 中继承的信息,请阅读以下内容 answer .我个人不喜欢使用任何框架。我使用的唯一框架是 Vapor.js .但是,在使用类时,我通常使用以下 gist :
var Class = function () {
var slice = Array.prototype.slice;
var bind = Function.prototype.bind;
var prototype = Class.prototype = new Function;
return prototype.constructor = Class;
function Class(definition, base) {
var klass = function () {
var instance = this;
if (base instanceof Class)
var uber = function () {
if (uber instanceof base) return uber;
arguments = slice.call(arguments);
arguments = [null].concat(arguments);
uber = bind.apply(base, arguments);
uber = new uber;
var hyper = instance.__proto__ = uber;
var proto = hyper.__proto__;
while (proto != parent) {
hyper = proto;
proto = hyper.__proto__;
}
hyper.__proto__ = child;
return uber;
};
var constructor = definition.call(this, uber);
constructor.apply(this, arguments);
};
if (base instanceof Class) {
klass.__proto__ = base;
var child = klass.prototype;
var parent = child.__proto__ = base.prototype;
} else klass.__proto__ = prototype;
return klass;
}
}();
这允许我创建类如下:
var Rectangle = new Class(function () {
var width;
var height;
function constructor(length, breadth) {
width = length;
height = breadth;
}
this.area = function () {
return width * height;
};
return constructor;
});
继承很简单:
var Square = new Class(function (uber) {
return function (side) {
uber(side, side);
};
}, Rectangle);
您还可以使用基类方法,例如:
var Cube = new Class(function (uber) {
var side;
function constructor() {
side = arguments[0];
uber = uber(side);
}
this.area = function () {
return 6 * uber.area();
};
this.volume = function () {
return side * uber.area();
};
return constructor;
}, Square);
每个类都有自己的原型(prototype)对象。因此,原型(prototype)或类本身的任何属性(静态属性)都会被每个派生类自动继承。在调用 uber
函数之前,类内部定义的属性不会被继承。 uber
函数返回基类的实例,以便可以调用基类方法。
编辑:这是一个working example上述模式:
var cube = new Cube(5);
alert("Side of the cube: 5");
alert("Area of the cube: " + cube.area()); // 150
alert("Volume of the cube: " + cube.volume()); // 125
关于javascript - 关于 prototype 和 prototypejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11623929/