javascript原型链与特权方法

function ClassA() {
        var value=4;
        this.getValue= function()
        {
            return value;
        }

        this.setValue= function(value)
        {
            this.value=value;

        }
     }

            var instance= new ClassA();
            document.write(instance.getValue());
            classA.setValue(1);
            document.write(instance.getValue());
            document.write(instance.value);


 

输出结果为:4,4,1。

原因是:var value 是私有变量,它与this.value不是同一个值。

下面我们分析下对象实例的创建与私有变量如何访问。

   1.实例属性与原型属性

     javascript对象创建实例时,实例属性和方法只有通过构造函数中的this,才可以赋给实例。如果想创建共享的属性或者方法,那么可以通过原型链共享。

        创建共享的属性:

     function ClassA() {
        var value=4;
        this.getValue= function()
        {
            return value;
        }

        this.setValue= function(value)
        {
            this.value=value;
        }
     }
    ClassA.prototype.value=1;//共享的value

    var  instance1=new ClassA(),//
         instance2=new ClassA();

   consloe.log(instance1.value);//1
   consloe.log(instance2.value);//1
   console.log(ClassA.value);//undefined
   


      那么ClassA()中的私有属性value我们可以通过ClassA.value访问吗?答案是不能。

         

我们分析下对象实例中标识符的查找。实例查找一个属性时,分为两步:

(1).在实例本身的实例属性中查找。

(2).如果查找不到实例属性,那么顺着原型链会找到对象的原型。

 

  ClassA.value 在ClassA的实例属性中查找不到,那么继续查找原型链,ClassA是Object的实例,因此会查找Object.prototype.value,显然值为undefined。

2.私有变量的访问

   我们知道,javascript没有块级作用域,但是我们可以通过函数来模拟块级作用域。而块级作用域里面的变量,称为私有变量。私有变量,外部无法访问,我们可以在函数内部

生成特权方法(特权方法:能够访问私有变量的方法),这里的特权方法就是this.getValue();通过构造函数创建,是创建特权方法的一种方法。


   创建特权方法的另外一种方式就是:静态方法。

    

function ClassA() {
        var value=4;
        this.getValue= function()
        {
            return value;
        }

        this.setValue= function(value)
        {
            this.value=value;
        }
        ClassA.getValue=function(){  //静态方法

            return value;
        }

     }

      






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值