面向对象与原型

原型概念: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

相关文章
相关标签/搜索