function dom(c){
this.node = c;
}
function canvas(c) {
// canvas.prototype = new dom(c);
// //console.log(1, 'canvas.constructor=', canvas.constructor);
// console.log(1, 'canvas.prototype.constructor=', canvas.prototype.constructor);
// console.log(1, 'this.__proto__.constructor=', this.__proto__.constructor);
// console.log(1, 'this.constructor=', this.constructor);
// console.log(1, 'this.__proto__ == canvas.prototype =', this.__proto__ == canvas.prototype);
// this.__proto__ = new dom(c);
// // console.log(2, 'canvas.constructor=', canvas.constructor);
// console.log(2, 'canvas.prototype.constructor=', canvas.prototype.constructor);
// console.log(2, 'this.__proto__.constructor=', this.__proto__.constructor);
// console.log(2, 'this.constructor=', this.constructor);
// console.log(2, 'this.__proto__ == canvas.prototype =', this.__proto__ == canvas.prototype);
// this.__proto__.__proto__ = dom.of(c);
}
/**
* Inherit:
* old:canvas.prototype.__proto__ = {}
* new:canvas.prototype.__proto__ = dom.prototype
* because of dom.prototype.__proto__ is {}
* calling process like this:
* canvas obj(new Canvas)
* -> canvas.prototype
* -> dom.prototype (canvas.prototype.__proto__)
* -> object (dom.prototype.__proto__)
* -> null (dom.prototype.__proto__.__proto__)
* dom.prototype should only have common shared variables and methods!
* instanceof ok,inherits ok
* if you do understand meanings of "instanceof"
* and do know meaning of "this" and "prototype",
* you will understand the following one code.
* but it cannot use dom's own fields or methods.
*/
canvas.prototype.__proto__ = dom.prototype;
var c = new canvas();
console.log(c instanceof dom);
console.log(c instanceof canvas);
true
true
可以在prototype中編寫init方法,然後在構造函數中調用,就達到了實際的構造函數是init,並且子類也可以繼承。