javascript 面向对象(六)原型的特性和作用

来源:互联网 发布:手机数据连接总是断开 编辑:程序博客网 时间:2024/05/16 11:20

1、根据实例对象获得原型对象    Object.getPrototypeOf()

function Person(){}Person.prototype.name = "梁";var p1 = new Person();//根据实例对象获得原型对象var prototyObj = Object.getPrototypeOf(p1);console.info(Person.prototype ==prototyObj);//true//每次代码读取对象的属性的时候,首先会搜索实例对象的属性,如果没有再去看原型对象的属性var p2 = new Person();console.info(p2.name);//梁p2.name = "昌";console.info(p2.name);//昌   想要获得原型对象的属性就这样: delete p2.name; p2.name

2、判断是原型属性还是实例属性  hasOWnProperty()

var p3 = new Person();console.info(p3.hasOwnProperty("name"));//falsep3.name = "z3";console.info(p3.hasOwnProperty("name"));//true

3、in 操作符判断属性是否在实例属性或者原型属性中 for in

var p3 = new Person();var p4 = new Person();console.info('name' in p3);//true

4、判断属性是否在原型对象中  object:要判断的对象,PropertyName属性

function hasPrototypeProperty(object,propertyName){return !object.hasOwnProperty(propertyName) && (propertyName in object)//!的优先级高于&&}

5、ECMA5中 constructor 是不能被枚举的
     Object.getOwnPropertyNames(obj)  枚举对象的所有属性,包括不可枚举的

//ESMA5 中Object.keys(object);//拿到当前对象的所有keys,即属性和方法返回一个数组var p5 = new Person();p5.name = "哈哈";p5.age = 20;console.info(Object.keys(p5));//['name','age']console.info(Object.keys(Person.prototype));//['name']//consele.info(p5.prototype); 不能同过实例.prototype拿到原型对象,只能通过构造函数.prototype////ECMA5中 constructor 是不能被枚举的//Object.getOwnPropertyNames(obj)  枚举对象的所有属性,包括不可枚举的var attr = Object.getOwnPropertyNames(Person.prototype);//["constructor", "name"]console.info(attr);var attr2 = Object.getOwnPropertyNames(p5);//["constructor", "name"]console.info(attr2);//["name", "age"]


阅读全文
0 0
原创粉丝点击