笔记:JS定义类或对象解决方案

1.工厂方式:

function createObj(){
  var oTemp = new Object;
  oTemp.name = "506";
  oTemp.age = 22;
  oTemp.getAge = function(){
  return this.age;
  };
  return oTemp;
}

var obj1 = createObj();
var obj2 = createObj();

[问题:重复创建函数对象]

 

2.构造函数方式

function Obj(sName,nAge){
  this.name = sName;
  this.age = nAge;
  this.getAge = function(){
  return this.age;
  };
}

var obj1 = new Obj("506",22);
var obj2 = new Obj("rock",23);

[问题:依然重复创建函数对象]

 

3.原型方式

function Obj(){
}
Obj.prototype.name = "506";
Obj.prototype.age = 22;
Obj.prototype.books = ["js","as"];
Obj.prototype.getAge = function(){
  return this.age;
};

var obj1 = new Obj();
var obj2 = new Obj();

obj1.books.push("php");
alert(obj1.books); //outputs "js,as,php"
alert(obj2.books); //outputs "js,as,php"

[问题:构造函数没有参数,多个实例时数组共享会造成问题]

 

4.混合的构造函数/原型方式

function Obj(sName,nAge){
  this.name = sName;
  this.age = nAge;
  this.books = ["js","as"];
}
Obj.prototype.getAge = function(){
  return this.age;
};

var obj1 = new Obj("506",22);
var obj2 = new Obj("rock",23);

obj1.books.push("php");
alert(obj1.books); //outputs "js,as,php"
alert(obj2.books); //outputs "js,as"

推荐用法

 

5.动态原型方法

function Obj(sName,nAge){
  this.name = sName;
  this.age = nAge;
  this.books = ["js","as"];
  
  if(typeof Obj._initialized == "undefined"){
    Obj.prototype.getAge = function(){
      return this.age;
    };
    Obj._initialized = true;
  }
}

var obj1 = new Obj("506",22);
var obj2 = new Obj("rock",23);

推荐用法


posted @ 2010-08-14 23:42  rock506  阅读(241)  评论(0编辑  收藏  举报