网络编程
位置:首页>> 网络编程>> JavaScript>> JavaScript中的私有成员 Javascript教程(2)

JavaScript中的私有成员 Javascript教程(2)

作者:Douglas Crockford  发布时间:2008-12-02 17:57:00 

标签:私有,对象,Object,javascript,教程

特权成员

一个特权A privileged 方法可以访问私有的变量和方法,同时它对公共域可见。也可以删除或替换一个特权方法,但不能改变它。

特权方法是用 this 在构造器中分配的。


function Container(param) {

    function dec() {
        if (secret > 0) {
            secret -= 1;
            return true;
        } else {
            return false;
        }
    }

    this.member = param;
    var secret = 3;
    var self = this;

    this.service = function () {
        if (dec()) {
            return self.member;
        } else {
            return null;
        }
    };
}

service 就是一个特权方法。前三次调用会返回‘abc’。之后 ,它会返回 null。service调用的私有的 dec 方法,而dec又访问了私有的 secret变量。service对其它的对象和方法是可见的,但不能直接访问私有成员。

闭包

这种公共、私有和特权成员的模式是可行的原因是由于JavaScript有 closure闭包。这个意味着一个内部的函数总是可以访问这个函数外部的变量和参数,甚至在外部的函数返回之后。这是这个语言的一个极其强大的特性。目前没有哪本关于JavaScript编程的书展示了如何发掘这个特性。大多数都没有提到。

私有和特权成员只能在对象构造的时候生成。公共成员可以在任意时刻添加。

模式

公共(Public)

function Constructor(...) {
    this.membername = value;
}
Constructor.prototype.membername = value;

私有(Private)

function Constructor(...) {
    var self =  this;
    var membername =  value;
    function  membername(...)  {...}
}

注意,实际上函数语句

function  membername(...)  {...}

是以下语句的缩写,两者相同:

var  membername = function  membername(...)  {...};

特权(Privileged)

function Constructor(...) {
    this.membername =  function (...)  {...};
}

 

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com