原型对象
基本类型:string,number,boolean,object,null,undefined
引用类型:String,Number,Boolean,Object,Function,Array,Date,RegExp,Error
每一个javascript对象(除null外)创建的时候都有一个属性__proto__,而他指向的就是原型对象(a.__proto__==String.prototype),每个原型都有一个constructor属性,关联原型对象(a.construcor==String.prototype.constructor)
var a = new String('abc')
//a的原型prototype是String
a.__proto__==String.prototype
//此时a和String都是指向String原型
a.constructor==String.prototype.constructor
//.construcor指向String
var a = new Number(666)
var a = new Object()
JavaScript new一个对象的过程:
function Mother(lastName){
this.lastName = lastName
}
var son = new Mother("Da")
1.创建一个新对象
son
2.新对象会被执行[[prototype]]链接
son.__proto__=Mother.prototype
3.新对象和函数调用this会绑定起来
Mother.call(son,"Da")
4.执行构造函数中的代码
son.lastName
5.如果函数没有返回值,那么就会自动返回这个新对象
return this
原型链
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎样?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立。如此层层递进,就构成了实例与原型的链条。这就是所谓的原型链的基本概念。