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

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值