JavaScript 繼承(但是不能繼承構造函數本身創建對象時的屬性!)

    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,並且子類也可以繼承。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章