我想了解这个原型。
你们任何人都可以澄清
中使用的原型之间的区别https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript链接 和 http://www.prototypejs.org/learn/class-inheritance
提前感谢。
答案 0 :(得分:2)
没有区别。 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);
每个类都有自己的原型对象。因此,原型上的任何属性或类本身(静态属性)都会被每个派生类自动继承。在调用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
答案 1 :(得分:1)
第二个链接是描述 Prototype ,一个用于构建JavaScript应用程序的框架;这是一个正确的名称。 (有点像命名窗口系统“Windows”,选择一个随机的例子。)第一个链接中使用的“原型”一词是JavaScript内部工作方式的标准术语。该框架以原型概念命名。
this link在JavaScript中对“原型”的概念进行了很好的介绍。
答案 2 :(得分:0)
https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript中提到的原型是一种编程风格(面向对象的编程,不使用class
);而
http://www.prototypejs.org中提到的Prototype是一个JavaScript库或框架,类似于jQuery,MooTools等。