【复习】javascript 原型对象,对象原型,原型对象和原型中的构造函数(constructor)

原型对象

 原型对象(prototype)是构造函数的一个属性,指向另一个对象;原型对象本身就是一个对象,原型对象的所有属性和方法,都被构造函数所拥有

  • 构造函数通过原型对象定义的方法是该构造函数的所有对象共享的
  • 更倾向于把不变或者常用的方法,直接定义在prototype对象上,这样,构造函数的所有实例对象都可共享这些方法
  • 一般情况下,会把公共方法定义到原型对象上 ,可以避免浪费内存
function Person (uname, age) {
			this.uname = uname;
			this.age = age;
		}

		// 每个构造函数都有一个属性,prototype,称为原型对象
		// console.log( Person.prototype );
		Person.prototype.say = function () {
			console.log('说话哇哈哈');
		}

		var obj = new Person('张三丰', 22);
		console.log( obj );
		// obj.say();


		// function Star () {}
		// console.log( Star.prototype );

  对象原型

  简称原型(__proto__)

  •   对象都会有一个属性__proto__,它指向构造函数的原型对象(prototype),对象之所有可以使用原型对象上的方法,就是因为对象上有__proto__的存在。
  • __proto__原型和prototype原型对象是等价的
  • __proto__对象的意义在于为对象的查找机制提供一个方向,但它是一个非标准属性,只可读,不可写,实际开发中并不使用这个属性,它只是内部指向prototype
console.log( obj.__proto__ );

  

  constructor(构造函数)

  这里指原型对象和原型中的constructor,原型对象(prototype)和原型(__proto__)里面都有一个constructor属性

  •   constructor指回构造函数本身
  • 主要记录对象引用于哪个构造函数,它可是让原型对象重新指向原来的构造函数

  

  构造函数,原型对象和原型三者之间的关系

  

  原型链 

  提供一个成员的查找机制,或者查找规则

  

javascript的成员查找机制

  • 当访问一个对象的属性(包括方法)时,首先查找这个对象自身有没有该属性。
  • 如果没有就查找它的原型(也就是__proto__指向的prototype 原型对象)。
  • 如果还没有就查找原型对象的原型(Object的原型对象)。
  • 依此类推一直找到Object 为止(null)。
  • __proto__对象原型的意义就在于为对象成员查找机制提供一个方向,或者说一条路线。

  重写prototype

// 构造函数
		function Star (uname, age) {
			this.uname = uname;
			this.age = age;
		}
		// 方法
		// console.log(Star.prototype);
		/* Star.prototype.chang = function () {
			console.log('唱歌');
		}
		Star.prototype.tiao = function () {
			console.log('跳舞');n
		Star.prototype.rap = function () {
			console.log('rap');
		} */
        // 重写prototype,会覆盖constructor,所以重写prototype的同时,也重写constructor
		Star.prototype = {
			// constructor : Star,
			constructor : Star,
			chang : function () {},
			tiao : function () {},
			rao : function () {}
		};
		console.log(Star.prototype);

  

  拓展内置对象

  这里以拓展Array对象为例

  Array.prototype.sum = function () {
		var sum = 0;
		for (var i = 0; i < this.length; i++) {
			sum += this[i];
		}
		return sum;
	}

	var arr = [1,2,3];
	console.log( arr.sum() );

	var newArr = [6,7,8,9];
	console.log( newArr.sum() );

猜你喜欢

转载自blog.csdn.net/THcoding_Cat/article/details/107020916