笔记: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);
推荐用法