JS中的几种原型对象与实例对象的判别方式

来源:互联网 发布:java 异常体系 编辑:程序博客网 时间:2024/05/16 10:49

hasOwnProperty():检测一个属性时存在于实例中,还是存在于原型中;

                                          给定属性存在于实例中,返回ture,反之,存在于原型中,返回false;

in:可与for结合形成for-in循环,单独使用时,in操作符会在通用对象能够访问给定属性时返回ture,无论该属性存在于原型中还是实例中。

hasOwnProperty函数返回为false,in返回为ture时,可确定该属性就是原型中的属性。

hasPrototypeProperty():属性存在于原型中ture;在实例中修改属性值后,该属性返回为false;


原型对象存在的问题:

        function Person(){        }                Person.prototype = {            constructor: Person,            name : "Nicholas",            age : 29,            job : "Software Engineer",            friends : ["Shelby", "Court"],            sayName : function () {                alert(this.name);            }        };                var person1 = new Person();        var person2 = new Person();                person1.friends.push("Van");                alert(person1.friends);    //"Shelby,Court,Van"        alert(person2.friends);    //"Shelby,Court,Van"        alert(person1.friends === person2.friends);  //true
  Person.prototype对象有个名为friend的属性,该属性包含一个字符串数组,然后创建了两个实例person1 person2,接着修改了person1.friend引用的数组,向数组中添加了

一个字符串。

 由于person1.friend数组在于Person.prototype而非person1中,故刚刚的修改也会修改Person.prototype的值,即person2.friend的值也会被修改变为Shellby,Court,Van;

0 0