js原型、原型对象、原型链、原型模式

1、如何理解js原型?
每个函数对象在创建的过程中都有一个prototype属性,它相当于是一个指针,指向了它自身的原型对象。这里讲述的函数对象其就是通过 new 、Function定义的对象。其实Object,Array,Number,String,Boolean等其他非Function的引用类型无非也是通过new,或者Function创建的。

function F(){};	F函数有prototype属性指向其原型对象。
var f=new F();	f是F new出来的一个实例对象。
f.__proto__===F.prototype	//true
F.prototype.constructor===F		//true
构造函数<——通过constructor指向构造函数——原型对象<——通过__proto__指针指向原型对象——实例对象
1、prototype:是构造函数身上的属性,指向原型对象。
2、contructor:是原型对象身上的属性,指向构造函数。
3、__proto__:是实例对象身上的属性,指向原型对象。

2、如何理解原型链?
每个实例对象身上都有其__proto__属性,它指向了自身的原型(prototype),而原型对象又链接其自己的原型,直到遇到某个对象的原型为null的时候,那么这条链接就结束。这一条一条的链接构成原型链。举个例子:因此由new Date()创建的Date对象继承Date.prototype,而Date.prototype又继承Object.prototype。所以,Date对象同时继承Date.prototype和Object.prototype。即一个对象它的原型还有原型的意思。
3、如何理解原型模式?
原型模式是用于创建对象的一种模式,找到一个对象,然后通过克隆来创建一个一模一样的对象,它是继承的一种方式。实现方式:

function inherit(obj){
	if(obj === null) throw TypeError();
	if(Object.create){
		return Object.create(obj);
	}
	var type = typeof obj;
	if(type !=="object" && type!=="function") throw TypeError();
	var F=function(){};
	F.prototype=obj;	//将F的原型设置为obj
	return new F();
}

ES5提供Object.getPrototypeOf()来查看对象的原型。要想检测一个对象是否是另一个对象的原型,提供isPrototypeOf()来判断。

谈到“原型继承”,JavaScript的这个继承机制并不复杂——基于原型链的委托机制就是原型链机制。即当对象无法响应某个请求时,会把请求委托给它自己的原型。这是因为对象会记住它的原型。
谈到“对象的原型”,其实对象是没有原型的,而是对象的构造器是有原型的。当对象无法响应某个请求时,会把请求委托给它自己的原型,换句话来说对象会把请求委托给它构造器的原型。这是原型继承的精髓。

猜你喜欢

转载自blog.csdn.net/Miss_hhl/article/details/103915674