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>