关于函数原型对象,对象的构造函数

函数原型对象prototype,对象的构造器constructor,对象的[[Prototype]]对象(浏览器中表示为-proto-,下文统一使用-proto-),涉及到对象构造,继承等一些概念,总有些搞不清,总结记录一下。

一、构造函数

function Temp(a){
this.name = a;
}
var b = new Temp("小明")

当一个函数使用new操作符来调用的时候,说明该函数作为了构造函数。new操作符会做以下几个操作。
1、新建一个对象,这时就需要原型对象了,每一个函数都有一个默认的原型对象,函数的prototype属性保存了它的引用,也就是Temp.prototype属性指向这个对象,默认情况下,该对象继承自Object,只有一个constructor属性,该属性在函数被创建时指向函数自身。使用new操作符时,使用这个对象生成一个新的实例。该实例的-proto-属性指向这个对象。
2、将函数的作用域赋予这个对象,也就是函数的this指向这个对象。
3、执行函数体内的内容,比如为这个对象添加属性和方法。如示例中的this.name = a
4、返回这个新对象。

1.1 使用构造函数创建对象的实例

构造函数作为对象构造器,类似于“类”,适用于创建有属性,有方法的对象。
使用示例:

function Temp(a){ 
this.name = a;
}
 //console.log(Temp.prototype)  {constuctor:f Tmep(a),_proto_:Object}

Temp.prototype.saynam = function (name){ 
this.name = name
}

 //console.log(Temp.prototype)  {saynam:f (name),constuctor:f Tmep(a),_proto_:Object}
var b = new Temp("小明")
//console.log(b)  Temp{name:"小明",_proto_:{saynam:f (name),constuctor:f Tmep(a),_proto_:Object}

对象原型中的属性和方法被所有实例共享,因此,一般在原型中设置方法,但属性在构造函数同设置,这个每个实例的属性就都是独立的。
除上述每个方法单独设置的方式外,也可以把所有的方法放在一个对象内设置。但一定要注意,不要忘了设置原型对象的constructor属性。

Temp.prototype = {
saynam:function (name){ 
this.name = name
},
getname:function (name){ 
return this.name
},
constructor:Temp
}

你可能感兴趣的:(关于函数原型对象,对象的构造函数)