变量的私有化
在函数内部的变量是私有的,外面是不可以访问到函数内部的变量的,但是函数内部可以访问到外部的变量。看下面的代码:
function Foo(paramOne) {
var thisIsPrivate = paramOne;
this.bar = function() {
return thisIsPrivate;
};
}
var foo = new Foo("Hello, Privacy!");
alert(foo.bar()); // alerts "Hello, Privacy!"
代码中创建了一个构造函数Foo();,并且私有了一个变量thisIsPrivate,当运行bar()时,私有的thisIsPrivate会被返回。这样thisIsPrivate受到了保护,在Foo()之外是访问不到的.
这种方法也是很多javascript工程师所推荐的写法,但是跟上面的代码一样,每次实例化Foo();之时,会创建一个bar方法,这样看上去又是对资源的浪费,而且会影响效率。所以我们可以通过使用prototype的方法来实现:
function Foo(paramOne) {
this._thisIsPrivate = paramOne;
}
Foo.prototype.bar = function() {
return this._thisIsPrivate;
};
var foo = new Foo("Hello, Convention to Denote Privacy!");
alert(foo.bar()); // alerts "Hello, Convention to Denote Privacy!"
这样的代码有不可以保证变量的私有化,只是我们在变量之前添加下划线_(很多公司内部规定,或者已经成为了很多程序员的编程习惯,_开头的变量是私有的),这样每次实例化Foo();会只建立一个通用的bar方法。