判断属性是在构造函数还是在原型里:
1.hasOwnProperty(属性名)---->>>此方法判断属性是否在构造函数里。是,则返回true,否,则返回false
2.in 操作符的判断范围在构造与原型中,只要在两个地方之一或都有该属性,则返回true
3.没有直接的方法来判断属性是否在原型中。但从以上两个方法中,可以推导一个方法出来,用于判断属性是否在原型中,如下:
function isInPrototype(object,property){
return !object.hasOwnProperty(property) && (property in object)
}
若该方法返回true,则表示该属性在原型中,而且只在。
用字面量方式创建原型:
function Box(){};
Box.prototype={
name:‘Lee‘,
age:100,
run:function(){
returnthis.name+this.age+‘运行中...‘;
}
};
字面量创建的方式使用constructor属性不会指向实例, 而会指向Object, 构造函数创建
的方式则相反。如果想让字面量方式的constructor指向实例对象,那么可以这么做:
functionBox(){};
Box.prototype={
constructor:Box,
name:‘Lee‘,
age:100,
run:function(){
returnthis.name+this.age+‘运行中...‘;
}
};
字面量方式为什么constructor会指向Object?因为Box.prototype={};这种写法其实就是创建了一个新对象。
而每创建一个函数,就会同时创建它prototype,这个对象也会自动获取constructor属性。 所以, 新对象的
constructor重写了Box原来的constructor, 因此会指向新对象,那个新对象没有指定构造函数,那么就默认为Object。