-
for(var key in obj) {}
注意: 返回的是能通过对象访问的,可枚举的属性,既包括实例属性也包括原型中的属性
-
obj.hasOwnProperty(key)
注意: key属性是obj对象的实例属性才会返回true,否则返回false
-
Object.getPrototypeOf(obj); //此方法是Object对象的,用来获取获取obj对象的原型
-
//确定原型和实例之间的关系
obj instanceof 原型对象 /true false
原型对象.isPrototypeOf(实例); //方法属于原型对象的 -
var keys = Object.keys(obj);
注意: 如果obj是实例对象,返回的是所有的实例属性,keys是返回的实例字符串的数组形式.如果是原型则返回所有的属性字符串数组
-
var keys = Object.getOwnPropertyNames(obj);
得到所有的实例属性,无论它是否可枚举.
原生对象的原型
原生引用类型:Object Array String等,在其构造函数的原型上定义了方法.通过原生对象的原型,不仅可以取得所有默认方法的引用,而且也可以定义新方法.
如:
String.prototype.startsWidth = function(text) { return this.indexOf(text) ==0; } var msg = "Hello World"; alert(msg.startsWidth("Hello"));
继承
接口继承
现讲一下原型 构造函数 实例之间的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个之下过原型对象的内部指针.
一个实例的原型对象是另一个实例对象的话,就构成了继承关系.
原型链的缺点:包含引用类型值的原型属性会被所有实例共享.
解决原型链缺点的办法:在子类的构造函数中调用超类的构造函数.通过 超类.call(this)使子类有自己的属性
未完待续...