搞定JS面向对象

  • 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)使子类有自己的属性

未完待续...

posted @ 2017-03-25 21:53  进阶乐园  阅读(196)  评论(0编辑  收藏  举报