您的位置:首页 > Web前端 > JavaScript

Javascript静态变量与实例变量

2015-11-08 12:31 676 查看
严格的来讲,js里面并没有静态与私有的概念,所有成员属性都是公开的,下面只是参考OO语言,通过某种方式来实现类似的概念。

一。静态变量

1.私有静态变量

所有实例共享。因为是私有的变量,所以不能通过函数名直接访问。通过闭包来实现。

根据闭包的作用域原理,只能在闭包内部访问。所以,并不是类的任何地方都可以访问这个静态变量。只有类的构造函数或者方法(原型方法),在闭包内部才可以访问。

Js代码


(function(){

var privateStatic = "privatestatic";

Func = function(){

this.setPrivateStatic = function(value){

privateStatic = value;

}

this.getPrivateStatic = function(){

return privateStatic;

}

}

})();

var func1 = new Func();

var func2 = new Func();

console.log(func1.getPrivateStatic());// privatestatic

console.log(func2.getPrivateStatic());// privatestatic

console.log(func1.setPrivateStatic('changed'));

console.log(func2.getPrivateStatic()); //changed

2.公共静态变量

这个比较简单,直接对函数定义属性。

Backbone的extend函数,有两个参数,第一个参数是实例变量,第二个参数是静态变量。期中静态变量的实现就是这种方式。

Js代码


Func = function(){

this.test = 'test';

}

Func.acfun= 'net';

console.log(Func.acfun); //net

二。实例变量

1.私有实例变量

在构造函数里面,通过var定义的变量,都是私有实例变量,只有在构造的内部才能访问。

Js代码


var Person = function(value){

var age =value;

this.getAge = function(){

return age;

}

}

Person.prototype._getAge = function(){

return age;

}

var yaoming = new Person('27');

console.log(yaoming.age) //undefined

console.log(yaoming.getAge()) //27

console.log(yaoming._getAge()) // age is not defined,原型方法不能访问age,仅在构造函数内部可以访问私有实例变量

2.公共实例变量

在构造函数或原型方法中使用this定义的属性,以及原型中定义的属性.

使用new 操作符对构造函数是实例化,会创建一个新的对象,并且将构造函数的作用域赋给新对象,并执 行代码,那么构造函数中如果有this定义属性或方法,则是对新对象添加属性或方法。

Js代码


var Person = function(name){

this.name = name;

}

Person.prototype.age = '11';

var yaoming = new Person('ym');

console.log(yaoming.name);

console.log(yaoming.age); //11
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: