天天看点

《JavaScript启示录》笔记——函数原型属性

//1.JS会为每一个Function()实例创建一个对象,无论是否用作构造函数
		//2.创建函数实例时,总是拥有一个prototype属性,该属性是一个空对象
		var func = function () {};
		console.log(func.prototype);
		console.log(typeof func.prototype);//Object

		//3.默认的prototype属性是Object()对象
		var func2 = function () {};
		func2.prototype = {};
		console.log(func2.prototype);//{}

		//4.原型链将每个实例都链接至其构造函数的prototype属性
		Array.prototype.name = 'name';
		var arr = new Array();
		//通过原型链访问原型对象的属性
		console.log(arr.__proto__.name);//name
		console.log(arr.constructor.prototype.name);//name

		//5.原型链的最后是Object.prototype,任何添加到Object.prototype的内容都将出现在for in 循环中
		//6.原型链返回在链中找到的第一个匹配结果
		//7.用新对象替换prototype属性会删除默认构造函数的constructor属性
		var func3 = function func3() {};
		func3.prototype = {};
		var func4 = new func3();
		console.log(func4.constructor === func3);//false
		console.log(func4.constructor);//Object
		//不替换原型属性时
		var func5 = function func5 () {};
		var func6 = new func5();
		console.log(func6.constructor === func5);//true
		console.log(func6.constructor);//func5{}
		//替换默认prototype属性时,重新连接引用该构造函数属性
		var func7 = function func7() {};
		func7.prototype = {constructor : func7};
		var func8 = new func7();
		console.log(func8.constructor === func7);//true
		console.log(func8.constructor);//func7{}

		//8.继承原型属性的实例总是获得最新值
		var func9 = function func9() {};
		func9.prototype = {num : 1};
		var func10 = new func9();
		console.log(func10.num);//1
		func9.prototype.num = 2;
		console.log(func10.num);//2

		//9.用新对象替换prototype属性不会更新之前的实例
		var func11 = function () {};
		func11.prototype.num = 1;
		var func12 = new func11();
		console.log(func12.num);//1
		func11.prototype = {num : 2};
		var func13 = new func11();
		console.log(func12.num);//1
		console.log(func13.num);//2

		//10.创建继承链
		var func14 = function () {this.str = 'coding'};
		func14.prototype.num = 10;

		var func15 = function () {this.word = 'javscript'};
		//将想要继承的对象的实例作为要继承对象函数的prototype属性
		func15.prototype = new func14();
		var func16 = new func15();

		console.log(func16.str,func16.num,func16.word);//coding,10,javascript