这里对于constructor 和 prototype做一个简单的介绍,旨在让大家有一个简单的了解与认识
1:定义与用法
prototype:属性使您有能力向对象添加属性和方法。
constructor:属性返回对创建此对象的数组函数的引用。
2:语法
object.prototype.name = value
object.constructor
在JavaScript语言中,constructor属性是专门为function而设计的,它存在于每一个function的prototype属性中。这个construtor保存了指向function的一个引用。
JavaScript内部会执行如下几个动作:
1:为该函数添加一个原型属性(即prototype对象)
2:为prototype对象额外添加一个constructor属性,并且该属性保存指向函数的一个引用。
这样当我们把函数F作为自定义构造函数来创建对象的时候,对象实例内部会自动保存一个指向其构造函数的prototype对象的一个属性__proto__,所以我们在每一个对象实例中就可以访问构造函数的prototype所拥有的全部属性和方法。
当然该实例也有一个constructor属性了(从prototype那里获取到),这时候constructor作用就很明显了,因为这时每一个对象实例都可以通过constructor对象访问它的构造函数。
即可以用代码表示:
使用构造函数来声明一个对象 var f = new F();,可以得到如下判断
f.constructor === F; // true
f.constructor === F.prototype.constructor; // true
3:其实constructor的出现原本就是用来进行对象类型的判断的,但是constructor属性易变,不可信赖。有一种更加安全的判定方法:instanceof 操作符。原型链继承,由于constructor存在于prototype对象上,因此我们可以结合constructor沿着原型链找到最原始的构造函数,如下面的代码:
function Person (name){
this.name = name;
this.showMe = function(){
alert(this.name);
}
};
var one = new Person('<a href="#" class='replace_word' title="JavaScript知识库" target='_blank'>JavaScript</a>')
one.showMe(); //<a href="#" class='replace_word' title="JavaScript知识库" target='_blank'>javascript</a>
4:原型链
每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会去__proto__里找这个属性,这个__proto__又会有自己的__proto__,于是就会这样一直下去,形成一个链,就是原型链。