日期:2014-05-16 浏览次数:20571 次
// json 只是用来表示结构, 不是说"类"真的就是一个json
var someclass = {
prototype : {
constuctor : function used when init newly created object.
__proto__ : point to parent
}
}
function A() {
}
var a = {};// empty object [1]
a.__proto__ = A.prototype;// [2]
A.call(a, arguments);//[3]
function A() {
this.name = 'Jack';
}
function B() {
}
// 如果我们想让 B 继承 A 的属性 name, 那么只要
var b = new B();
b.__proto__ = A.prototype;
function B() {
}
var b = new B();
b:{
__proto__: {
constructor: function B() {...}
__proto__: Object
}
}
b:{
__proto__: {
constructor: function B() {...}
__proto__: A
}
}
function A() {
}
function B() {
}
function F() {
}
F.prototype = A.prototype;
var f = new F();
B.prototype = f;
B.prototype.constructor = B;
function A() {
}
function F() {
}
// 清晰起见, 我们设置
var APROTO = A.prototype
F.prototype = A.prototype;// F.prototype = APROTO;
var f = new F();// f.__proto__ = F.prototype = APROTO;
function B() {
}
B.prototype = f;
// js 默认会为每个类型创建一个 prototype 对象,
// 当然我们也可以指定 prototype 对象, 像这样 B.prototype = f,
// 则有, B.prototype = f = {__proto__ : APROTO} 这里尤其关键, 因为它折腾出了一个 __proto__ 指向 A 的对象 f.
var b = new B();
/*
根据实例建立的三个步骤 b.__proto__ = B.prototype = {__proto__ : APROTO}; b 的结构为:
b:{
__proto__: {
__proto__: APROTO
}
}
而之前的目标结构为:
b:{
__proto__: {
constructor: function B() {...}
__proto__: A
}
}
比较发现, 只要设置
B.prototyp.constructor = B;
目标和结果就完全一致了, 就实现了完美的继承.
*/
// 清晰起见我们定义tool函数
function Extends(supe