对象(二)

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

function Person() {
    }
    Person.prototype.name = "张三";
    Person.prototype.age = 26;
    Person.prototype.sayName = function () {
        alert("我是公共的 name 属性");
    }

    var p1 = new Person();
    alert(Object.getPrototypeOf(p1)  == Person.prototype )      // true

2、每次代码读取对象的一个属性的时候,首先在实例对象的属性中搜索是否有要找的属性,如果有,则取该属性值,如果没有,则去该对象对应的原型对象中查找该属性,如果有则返回该属性值,如果没有则返回 undefined

function Person() {
    }
    Person.prototype.name = "张三";
    Person.prototype.age = 26;
    Person.prototype.sayName = function () {
        alert("我是公共的 name 属性");
    }
var p2 = new Person()
    p2.name = "赵武";
    alert(p2.name)          // 赵武
    delete p2.name;
    alert(p2.name)          // 张三   // 如果需要访问原型上的 name 属性,将 实例对象上的属性删除 ,则可以直接访问 原型上的 name 属性

3、hasOwnProperty  判断一个 对象属性是属于 实例属性 还是属于 原型属性

function Person() {
    }
    Person.prototype.name = "张三";
    Person.prototype.age = 26;
    Person.prototype.sayName = function () {
        alert("我是公共的 name 属性");
    }
var p3 = new Person()
    alert(p3.hasOwnProperty("name"))        // false
    p3.name = "aaa";
    alert(p3.hasOwnProperty("name"));       // true

4、in 操作符   

  判断属性是否存在于实例对象和原型对象中

function Person() {
    }
    Person.prototype.name = "张三";
    Person.prototype.age = 26;
    Person.prototype.sayName = function () {
        alert("我是公共的 name 属性");
    }
var p4 = new Person();
    alert('name' in p4);         // true
    p4.name = "aaa";
    alert('name' in p4);         // true

5、利用 in 操作符 和 hasOwnPrototype 函数来 判断 属性是否是 原型的

function Person() {
    }
    Person.prototype.name = "张三";
    Person.prototype.age = 26;
    Person.prototype.sayName = function () {
        alert("我是公共的 name 属性");
    }
    var p4 = new Person();
    function checkOwnPrototype(attr,obj) {
        return (attr in obj) && (!obj.hasOwnProperty(attr))
    }
    alert(checkOwnPrototype("name",p4))       // true
    p4.name = "aaa";
    alert(checkOwnPrototype("name",p4))       // false

6、Object.keys() 拿到当前对象里所有的 keys ,返回一个数组

function Person() {
    }
    Person.prototype.name = "张三";
    Person.prototype.age = 26;
    Person.prototype.sayName = function () {
        alert("我是公共的 name 属性");
    }
    //  Object.keys()  拿到当前对象里所有的 keys ,返回一个数组
    var p6 = new Person();
    p6.name = "aaa"
    var arr = Object.keys(p6)
    alert(arr)      // name
    alert(Object.keys(Person.prototype))        // name,age,sayName

7、Object.getOwnPropertyNames 枚举对象的所有属性 ,包括可枚举属性和不可枚举属性

function Person() {
    }
    Person.prototype.name = "张三";
    Person.prototype.age = 26;
    Person.prototype.sayName = function () {
        alert("我是公共的 name 属性");
    }
    // Object.getOwnPropertyNames   枚举对象的所有属性 ,包括可枚举属性和不可枚举属性
    // constructor 是不可枚举的属性
    var attributes = Object.getOwnPropertyNames(Person.prototype)
    alert(attributes)           // constructor,name,age,sayName

 

posted @ 2017-11-07 14:31  linfang.zhou  阅读(119)  评论(0编辑  收藏  举报