JS种中能模拟出依赖对象本身的可变的js对象私有属性性吗

Javascript对象的私有属性 - 开源中国社区
当前访客身份:游客 [
当前位置:
发布于 日 10时,
大家都知道Javascript函数对象的所有属性都是公开的,是没有私有属性这一个概念的.但是,不要忘记了Javascript的两大特性(原型和闭包).说到这里,可能很多朋友已经知道怎么样实现私有属性了.没错,我们就是要通过Javascript的闭包来实现.
概念性的东西可能比较难理解,我们还是以实例来说明:
代码片段(1)
1.&[图片] 6.jpg&&&&
开源中国-程序员在线工具:
开源从代码分享开始
kuky821的其它代码> js中定义对象的几种形式
js中定义对象的几种形式
jxfz889 & &
发布时间: & &
浏览:44 & &
回复:0 & &
悬赏:0.0希赛币
js中定义对象的几种方式
  1. 基于已有对象扩充其对象和方法(只适合于临时的生成一个对象):
  var obj = new Object();
  obj.name="userObject";
  obj.printName = function(name){
  this.name =
  alert(this.name);
  obj.printName("newUserObject");
  2.工厂方式创建对象(每次创建一个object后,其中对应的方法(本例中是get)也被创建一次,方法不能被所创建的所有对象(本例中是obj1和obj2)共享):
  function createObject(){
  var obj = new Object();
  obj.name="userObject";
  obj.password = "12345";
  obj.get = function(){
  alert(this.name + ", " + this.password);
  var obj1 = createObject();
  var obj2 = createObject();
  obj1.get();
  obj2.get();
  b.带参数的构造方法:
  function createObject(username,password){
  var obj = new Object();
  obj.username =
  obj.password =
  obj.get = function(){
  alert(this.username + ", " + this.password);
  var obj1 = createObject("zhangsan","123456");
  obj1.get();
  c.让函数被多个创建的对象所共享,而不是每一个对象都创建一个相同的函数(缺点:对象定义本身和方法分离了):
  function get(){
  alert(this.username + ", " + this.password);
  function createObject(username,password){
  var obj = new Object();
  obj.username =
  obj.password =
  obj.get =
  var obj1 = createObject("zhangsan","123456");
  var obj2 = createObject("lisi","54321");
  obj1.get();
  obj2.get();
  3.构造函数方式:
  function Person(){
  this.username = "zhangsan";
  this.password = "123";
  this.getInfo = function(){
  alert(this.username + ", " + this.password);
  var person = new Person();
  person.getInfo();
  b.可以在构造函数是传递参数:
  function Person(username,password){
  this.username =
  this.password =
  this.getInfo = function(){
  alert(this.username + ", " + this.password);
  var person = new Person("zhangsan","123");
  person.getInfo();
  4.使用原型(prototype)方式创建对象:
  优点:创建的多个对象共享同一个方法(getInfo)
  缺点:创建的多个对象在共享同一个方法的同时也共享了同样的属性(username,password),实际开发中这样儿是
  不行的,必须是多个对象都要有自己的属性。
  采用该方式创建对象通常是用来扩展已有对象的某一个方法。
  function Person(){}
  Person.prototype.username = "zhangsan";
  Person.prototype.password = "123";
  Person.prototype.getInfo = function(){
  alert(this.username + ", " + this.password);
  var person = new Person();
  var person2 = new Person();
  person.username = "lisi";
  person.getInfo();
  person2.getInfo();
  b.如果使用原型方式创建对象,那么生成的所有对象将会共享原型中的属性,这样儿一个对象改变了该属性也会反应到其他的对象上:
  function Person(){}
  Person.prototype.username = new Array(0;
  Person.prototype.password = "123";
  Person.prototype.getInfo = function(){
  alert(this.username + ", " + this.password);
  var person = new Person();
  var person2 = new Person();
  person.username.push("zhangsan");
  person.username.push("lisi");
  person.password = "456";
  person.getInfo();
  person2.getInfo();
  c.使用原型和构造函数方式来创建对象:
  function Person(){
  this.username = new Array();
  this.password = "123"
  Person.prototype.getInfo = function(){
  alert(this.username + ", " + this.password);
  var person = new Person();
  var person2 = new Person();
  person.username.push("zhangsan");
  person.username.push("lisi");
  person.getInfo();
  person2.getInfo();
  5.动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。
  function Persion(){
  this.username = "zhangsan";
  this.password = "123";
  if(typeof Person.flag == "undefined"){
  Person.prototype.getInfo = function(){
  alert(this.username + ", " + this.password);
  Person.flag =
  var p = new Person();
  var p2 = new Person();
  p.getInfo();
  p2.getInfo();
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&JS中的JSON对象
我的图书馆
JS中的JSON对象
JS中的JSON对象
TA的最新馆藏[转]&

我要回帖

更多关于 可变对象和不可变对象 的文章

 

随机推荐