浅谈js对象及对象属性

对象:

ECMA-262把对象定义为 :无序属性的集合,其属性可以包含基本值,对象或者函数。

严格来讲,这就相当于说对象是一组没有特定顺序的值。对象的每一个属性或方法都有一个名字,而每个名字都映射到一个值

所有我们可以把对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数。每个对象都是基于一个引用类型创建的。

 

下面是几个关于对象属性的一些方法

1.hasOwnProperty()方法

判断一个属性是在实例中,还是在原型对象中,可以使用这个方法。只有属性存在于对象实例中,这个方法才会返回true

2.原型与in操作符

在单独使用时,in操作符会在通过对象能够访问给定属性时返回true,无论该属性是存在于实例中还是原型中

 

function hasPrototypeProperty(object,name){
        return !object.hasOwnProperty(name) && (name in object)
    }

 

3.Object.keys()方法

这个可以取得对象上所有可以枚举的实例属性,这个方法接收一个对象作为参数,返回一个包含所有可枚举属性的字符串数组

function Person(){
    }
    Person.prototype.name = "tom";
    Person.prototype.age = 29;
    Person.prototype.job = "soft";
    Person.prototype.sayName = function(){
        alert(this.name);
    }
    var keys = Object.keys(Person.prototype);//传入这个方法的是一个原型对象
    alert(keys);//"name,age,job,sayName"

    var p1 = new Person();
    p1.name = "Rob";
    p1.age = 31;
    var p1keys = Object.keys(p1);
    alert(p1keys);//"name,age"
    //这个变量keys中将保存一个数组,数组中的字符串的顺序也是他们在for-in循环中出现的顺序。通过new Person(),即实例调用,只会返回包括两个属性的字符串数组,“name,age”.

4.Object.getOwnPropertyNames()方法

如果想要得到所有实例属性,无论是否可以枚举,都可以使用

var keys = Object.getOwnPropertyNames(Person.prototype);
    alert(keys);//"constructor,name,age,job,sayName"
posted @ 2017-03-01 11:00  sminocence  阅读(584)  评论(0编辑  收藏  举报