javascript定義對象寫法

javascript定義對象的幾種簡單方法 javascript

1.構造函數方式,所有屬性及對象的方法都放在構造方法裏面定義 css

優勢:動態的傳遞參數 html

缺點:每建立一個對象就會建立相同的方法函數對象,佔用大量內存 java

function User1(name, password) {
 this.name = name;
 this.password = password;
 this.login = function(name,password){
  if(this.name == name && this.password == password) {
   return true;
  }else {
   return false;
  }
 };
}

2.原型方式,將對象屬性及方法定義都寫在對象的prototype裏面 數組

優勢:每次建立對象時都是使用相同prototype中的方法,不會佔用重複的內存 函數

缺點:沒法動態傳遞構造參數 this

function User2() {

}
User2.prototype.name = "prototype name";
User2.prototype.password = "prototype password";
User2.prototype.login = function(name,password){
 if(this.name == name && this.password == password) {
  return true;
 } else {
  return false;
 }
};
原型方式的另外一種寫法:
格式:
var 對象名 = {};
    對象名.prototype.變量1=變量1的值;
    對象名.prototype.變量2=變量2的值;
    ……;
    對象名.prototype.函數1= function() {
       函數體
    };
    對象名.prototype.函數2= function() {
       函數體
    };
    ……;
說明:
(1)       初始對象體內能夠不定義任何東西;
(2)       在要定義的變量前加「對象名.prototype.」的格式;
(3)       對象的內容與值以等號分隔,成對出現;
(4)       包含的變量或者函數之間以分號分隔,也能夠省去分號。
(5)       函數須要寫在function(){}的大括號以內。
例子:
var data = {};
    data.prototype. name ="Vicky」;
    data.prototype. age =20;
    data.prototype. eat = function() {
       alert(‘I wanna eat meat’);
    };
    data.prototype. sleep= function() {
       alert(‘I wanna sleep’);

    };

3.構造及原型混合方式,將屬性定義寫在構造方式裏面,方法寫在prototype裏面 spa

優勢:綜合了construct及prototype方式的優勢,能夠動態傳遞構造參數,而且方法函數對象也只建立一個 prototype

缺點:函數寫在對象外面,不太符合面向對象的思想 code

function User3(name,password) {
 this.name = name;
 this.password = password;
}
User3.prototype.login = function(name,password) {
 if(this.name == name && this.password == password) {
  return true;
 } else {
  return false;
 }
};

4.動態原型方式:加一個判斷屬性,來判斷該對象是否已經被建立過,若是被建立過,則方法就不在構建

優勢:將原型函數寫在對象定義裏面

缺點:不支持繼承

function User4(name,password) {
 this.name = name;
 this.password = password;
 if(typeof User4.__initialized == "undefined") {
  User4.prototype.login = function(name,password){
   if(this.name == name && this.password == password) {
    return true;
   } else {
    return false;
   }
  };
  User4.__initialized = true;
 }
}

五、JSON方式/對象直接量

格式:
var 對象名 = {
             變量1: 變量1的值,
             變量1: 變量1的值,
             ……,
            函數1: function() {
                函數體
            },
            函數2: function() {
                函數體
            }//Note:最後的逗號要去除爲了和IE兼容。
};
說明:
(1)       大括號內直接填寫變量或者函數;
(2)       對象的內容與值以冒號分隔,成對出現;
(3)       包含的變量或者函數之間以逗號分隔;
(4)       函數須要寫在function(){}的大括號以內。
例子:
var  對象名 = {
       name:    「Vicky」,
       age:     26,
       eat: function() {
              alert(‘I wanna  eat meat’);
       },
       sleep: function() {
              alert(‘I wanna sleep’);
        }
};
註釋:相似的方式也叫作匿名類
匿名類舉例:     

    index: '//', 
    reg: new RegExp('^//.*$'), 
    css: "comment" 
}
上面的方式建立了類,只是沒賦給一個變量而已。

六、create方式

該方式利用了Prototype JavaScript組件庫。
格式:
       var 對象名 = Class.create();
       Object.extend(對象名.prototype, {
            變量1: 變量1的值,
            變量1: 變量1的值,
             ……,
            函數1: function() {
                     函數體
                },
            函數2: function() {
                     函數體
            },
……
});
說明:
(1)       對象的建立使用了Prototype庫中的Class.create()函數;
(2)       對象的內容使用Prototype庫中的Object.extend()函數來擴展;
(3)       被擴展的對象在傳入Object.extend函數時必定要帶上prototype,
(4)       擴展內容被大括號包含,其內與JSON方式的定義格式徹底相同。
例子:
       var data = Class.create();
       Object.extend(dta.prototype, {
       name: "Vicky",
       age: 20,
       eat: function() {
              alert(‘I wanna eat meat’);
       },
       sleep: function() {
              alert(‘I wanna sleep’);
       }
       });

      其實,JS對象的定義還有其它的方式,你也能夠用上面幾種進行組合定義,這顯出了JS做爲動態語言的自由性。
JS對象的建立正規方法以下:
var d1 = new Data();
       JS對象變量的引用方式有兩種:
(1)       點號方式引用,如,data.name。
(2)       數組方式引用,如,data[‘name’]。

比較簡單的一種方式

var HistoryNew=function(){};

HistoryNew.prototype={

 setHistory:function(cityShort){alert(cityShort);

}

};

?
varAnimal = Class.create();
Animal.prototype = {
    initialize:function(name, sound) {
        this.name = name;
        this.sound = sound;
    },
    speak:function() {
        alert(name +" says: "+ sound +"!");
    }
};
 
varsnake =newAnimal("Ringneck","hissssssssss");
snake.speak();
// -> 提示:"Ringneck says: hissssssssss!"
varDog = Class.create();
Dog.prototype = Object.extend(newAnimal(), {
    initialize:function(name) {
        this.name = name;
        this.sound ="woof";
    }
});
 
varfido =newDog("Fido");
fido.speak();
// -> 提示:"Fido says: woof!" 
?
一個簡單的類

function clsUser(){};
clsUser.prototype={
name:"",
pwd:"",
}
var objUser=new clsUser();
objUser.name="a";
alert(objUser.name);

var objB=new clsUser();
objB.name="b";
alert(objB.name);

<script type="text/javascript">
function MyClass(name){           
    
this._name = name;  //在函數體內初始化屬性
}

MyClass.prototype 
= {      //在prototype上定義屬性和方法
    _name: null,
    showName: 
function(){
        alert(
this._name);
    }

}

var m = new MyClass("fanrong");
m.showName();
</script>

相關文章
相關標籤/搜索