原型与操作符

来源:互联网 发布:各地区区号知乎 编辑:程序博客网 时间:2024/05/29 03:15
 //Object.getPrototypeOf(person1);//取的person1对象的原型           // Person.prototype.isPrototypeOf(person1);//判断person1的__proto__是否指向Person.prototype(即person1的原型)            person1.hasOwnProperty("name")//hasOwnProperty()检测一个属性是存在于原型中还是存在于实例中,给定属性存在于对象实例中时才会返回true            delete person1.name;//可以删除实例属性,此时person1的name属性只能从原型中搜到            "name" in person1//如论从原型中获的,还是实例属性中获的,只要存在name属性,都会返回true,因此可以使用in和hasOwnProperty()来判断属性存在于原型中还是实例中            function hasOwnProperty(obj,name){                return !obj.hasOwnProperty(name) && (name in obj);//只要(name in obj)返回true,函数返回true时,属性存在于原型中;函数返回false,属性存在于实例中            }          //  在使用for-in循环时,返回的是所有能够通过对象访问的、可枚举的属性,其中既包括存在于实例中的属性,也包括存在于原型中的属性。            //屏蔽了原型中不可枚举属性(即将[[ Enumerable ]]标记为false的属性)的实例属性也会在for-in循环中返回,因为根据规定,所有开发人员定义的属性都是可枚举的--只有在IE8以及更早版本中例外            var o = {                toString: function () {                    return "My Object";                }            }            for(var pro in o){                if(pro == "toString"){                    alert("Found toString");//在IE中不会显示                }            }            //要取的对象上所有可枚举的实例属性,可以使用es5中的Object.keys()方法。接收一个对象作为参数,返回一个包含所有可枚举属性的字符串数组。            function Person(){            }            Person.prototype.age = 20;            Person.prototype.name = "DZZ";            Person.prototype.sayName = function () {                alert(this.name);            };            var keys = Object.keys(Person.prototype);//参数为原型对象            alert(keys);//age,name,sayName            var p1 = new Person();            p1.name = "YBB";            p1.age = 24;            var p1keys = Object.keys(p1);//参数为实例对象            alert(p1keys);//name,age            //Object.getOwnPropertyNames()//得到所有的实例属性,无论它是否枚举            var keys = Object.getOwnPropertyNames(Person.prototype);            alert(keys);//constructor,age,name,sayName

原创粉丝点击