我想了解這個原型。關於原型和原型js
任何你能澄清的是什麼
https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript鏈接 和 http://www.prototypejs.org/learn/class-inheritance
由於事先使用的原型之間的差異。
我想了解這個原型。關於原型和原型js
任何你能澄清的是什麼
https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript鏈接 和 http://www.prototypejs.org/learn/class-inheritance
由於事先使用的原型之間的差異。
第二個鏈接是描述原型,一個構建JavaScript應用程序的框架;這是一個合適的名字。 (有點像命名窗口系統「Windows」,以隨機選擇一個例子。)第一個鏈接中使用的「prototype」這個詞是JavaScript內部工作的標準術語。該框架以原型概念命名。
JavaScript中的「prototypes」概念有很好的介紹,文章號碼爲this link。
在https://developer.mozilla.org/en/Introduction_to_Object-Oriented_JavaScript中提到的原型是一種編程風格(面向對象的編程,不使用class
);而
在http://www.prototypejs.org提到的原型是一個JavaScript庫或框架,類似於jQuery,MooTools等。
沒有區別。 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