我想了解这个原型。
你们中的任何人都可以澄清一下使用的原型有什么区别吗?
https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript链接和 http://www.prototypejs.org/learn/class-inheritance
提前致谢。
我想了解这个原型。
你们中的任何人都可以澄清一下使用的原型有什么区别吗?
https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript链接和 http://www.prototypejs.org/learn/class-inheritance
提前致谢。
没有区别。Prototype JS 只是一个让使用 JavaScript 变得更容易的框架。两种情况下的prototype
属性都属于用作构造函数的函数,即简单的 JavaScript。
如果您想进一步了解 JavaScript 中的继承,请阅读以下答案。我个人不喜欢使用任何框架。我使用的唯一框架是Vapor.js。但是,在使用类时,我通常会使用以下要点:
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
函数返回基类的一个实例,以便可以调用基类方法。
编辑:这是上述模式的一个工作示例:
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
第二个链接是描述Prototype,一个用于构建 JavaScript 应用程序的框架;这是一个专有名称。(有点像将窗口系统命名为“Windows”,随便举个例子。)第一个链接中使用的“原型”一词是 JavaScript 内部工作方式的标准术语。该框架以原型概念命名。
在此链接中对 JavaScript 中的“原型”概念进行了很好的介绍。
https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript中提到的原型是一种编程风格(面向对象的编程不使用class
);然而
http://www.prototypejs.org中提到的 Prototype是一个 JavaScript 库或框架,类似于 jQuery、MooTools 等。