原型形式,每一个建立的对象都有一个prototype属性,这个属性是一个指针,指向一个对象,而这个对象的用处是包括可以由特定范例的一切实例同享的属性和要领。
———————————————————–————-
isPertotypeOf()要领来肯定对象之前是不是存和原型之间的关联;
不能重写原型中的属性,假如给对象实例增加的属性与实例原型中的一个属性同名,那末在实例对象中建立的属性会将原型中的屏蔽掉。可以用delete删除实例对象中本身增加的属性;
hasOwnPrototype()可以肯定属性是原型中照样实例对象中,当时实例对象中时,返回的是true;
in操作符,有两种运用体式格局,零丁运用和for-in 循环中。零丁运用,经由过程对象可以接见属性时返回true,不管时在原型中照样实例对象中。
下面是根据以上属性、要领枚举的实例
function Person(){
}
Person.prototype.name="Nike";
Person.prototype.age=29;
Person.prototype.job="Software Engineer";
Person.prototype.sayName=function(){
alert(this.name);
};
function test(){
var person1=new Person();
person1.name="TONY";
//delete person1.name; //删除建立实例person1时赋值的name
person1.sayName();
var person2=new Person();
person2.sayName();
基于原型形式建立的对象指向统一个对象,person1和person2接见的都是统一组属性和统一个sayName()函数,所以返回是true
alert(person1.sayName==person2.sayName);
推断实例对象是不是是Person原型形式,person1是Person的原型形式
alert(window.Person.prototype.isPrototypeOf(person1));
hasOwnProperty()要领推断属性是不是是实例对象中,假如是,返回true
alert(" person1:"+person1.hasOwnProperty("name")+" person2:"+ person2.hasOwnProperty("name"));
in操作符,name属性是不是在person1对象中,该属性是实例对象本身赋值的
alert( "name" in person1);
in操作符,name属性是不是在person2对象中,该属性是原型形式中的
alert("name" in person2);
推断对象的属性是不是是原型中的,属性在对象中,而且不是实例对象本身赋值的便会返回true
alert(hasOwnPropertyIn(person1,"name");
alert( hasOwnPropertyIn(person2,"name"));
可以将in操作符与hasOwnProperty()要领一同运用,用于推断属性是不是是原型中值
function hasOwnPropertyIn(object,sub){
return (!object.hasOwnProperty(sub)) && (sub in object);
}