原型概念:javascript
咱们建立的每一个函数都有一个prototype(原型)属性,这个属性是一个对象,它的用途是包含能够由特定类型的全部实例共享的属性和方法。逻辑上能够这么理解,prototype经过调用构造函数而建立的那个对象的原型对象。使用原型的好处可让全部对象实例共享它所包含的属性和方法。也就是说,没必要在构造函数中定义对象信息,而是能够直接将这些信息添加到原型中。java
function Box(name,age){ this.name=name; //实例属性 this.age=age; this.run=function(){ //实例方法 return this.name+this.age+'运行中。。。' } } //原型 function Box(){} Box.prototype.name='lee'; Box.prototype.age=100; Box.prototype.run=function(){ return this.name+this.age+'运行中。。。' } var box1=new Box(); var box2=new Box(); alert(box1.run==box2.run) //true //若是是实例方法,不一样的实例化,他们的方法地址是不同的,是惟一的 //若是是原型方法,那么他们地址是共享的,你们都是同样
alert(box1.prototype) //这个属性是一个对象,访问不到函数
alert(box1.__proto__) //这个属性是一个指针指向prototype原型对象this
alert(box1.constructor) //构造属性,能够获取构造函数自己prototype
//做用是被原型指针定位,而后获得构造函数自己指针
//其实就是对象实例对应原型对象的做用,链接做用code
原型模式的执行流程:对象
1,先查找构造函数实例里的属性和方法,若是有,马上返回ip
2,若是构造函数实例里没有,则去它的原型对象里找,若是有,就返回原型
虽然咱们能够经过对象实例访问保存在原型中的值,但却不能访问经过对象实例重写原型中的值
<1 判断实例中是否有属性
box1.hasOwnProperty('name');
<2 // in 只要有的就会返回,判断无论实例仍是原型里,只要有就是true
alert('name' in box1);
<3 如何判断只有原型里有
//判断只有原型里有name function isProperty(object,property){ return !object.hasOwnProperty(property)&& (property in object) } alert(isProperty(box1,'name'))
function Box(){}
var box=new Box();
//alert(box.prototype); //使用对象实例没法访问到prototype
//alert(box.__proto__); //使用对象实例访问prototype的指针
alert(Box.prototype) //使用构造函数名(对象名)访问prototype