constructor:对象的属性指向其构造器函数,函数的constructor为Function
hasOwnProperty:对象是否拥有属性,obj.hasOwnProperty(‘name’);判断name是否是obj自身的属性
has 有 own拥有 property属性
propertyIsEnumerable:属性是否可枚举 ,length不可枚举,原型中的属性不可枚举,虽然原型中的属性不能枚举,但实际是能枚举出来,
for(var i in myobj){
log(i+”:”+myobj[i])
}
isPortotypeOf:是谁的原型,obj.isPrototypeOf(myobj),obj是myobj的原型吗
prototype:函数的原型对象,实例对象没有。函数的原型对象是一个空对象,有一个constructor属性指向F函数,和proto指向Object
var F=function(name){
this.name=name;
};
var obj={
category:”human”,
say: function () {
alert(“Hello “+this.name+ ” you are a “+this.category)
}
};
var myobj=new F(‘liu’);
log(obj.prototype);//undefined
log(myobj.prototype);//undefined
log(F.prototype);//空对象,有一个constructor属性指向F函数,和proto指向Object
proto:实例对象的属性,指向此对象的原型对象,也即是实例对象的构造器函数的原型对象 ,对象原型直接覆盖的需要重置constructor属性。F.prototype=obj;
F.prototype.constructor=F;
var log=console.log.bind(console);
var F=function(name){
this.name=name;
this.age=’20’;
};
var obj={
category:”human”,
say: function () {
alert(“Hello “+this.name+ ” you are a “+this.category)
}
};
var myobj=new F(‘liu’);
log(obj.proto);//对象直接量定义的对象的,指向Object
log(myobj.proto);//构造器new的对象,指向F构造器函数的原型对象
log(F.proto);//函数的proto,是function(){}空函数不知道是什么鬼