js建立物件
- //定義一個apple物件的建構函式
- function Apple{
- this.color='red';
- }
- //建立一個apple物件
- var apple1 = new Apple();
- //我還可以這麼建立apple物件
- var apple2 = {
- color:'red';
- }
- 這兩個apple物件在記憶體中都是完全一樣的。只不過js提供了兩種建立方式而已。
1、工廠方式:
- function createCar(colors,doors){
- var tempCar = new object();
- tempCar.colors = colors;
- tempCar.doors = doors;
- tempCar.showColor = function showColor(){
- alert(this.color);
- };
- }
缺點:不像常用的物件導向宣告的方式;每宣告一個Car例項,就要建立多一個showColor函式,不能複用,浪費記憶體 。
2、建構函式的方式:
- function Car(colors,doors){
- this.colors = colors;
- this.doors = doors;
- this.showColor = function showColor(){
- alert(this.color);
- }
優點:以更物件導向的方式
缺點:每宣告一個Car例項,就要建立多一個showColor函式,不能複用,浪費記憶體。
3、prototype原形的方式:
//首先定義建構函式
- function Car(){
- }
- Car.prototype.colors = "red";
- Car.prototype.doors = 4;
- Car.prototype.showColor = function(){
- alert(this.colors);
- };
//以上面的定義原形建立Car
var car1 = new Car();
var car2 = new Car();
優點:重用程式碼,car1.showColor,car2.showColor指向的是同一個函式位置。
缺點:建構函式沒有引數,不能在呼叫建構函式時,自定義自己的Car。
注:這個缺點可以這樣解決:var car1 = new Car();宣告後,再指定它自己的欄位和方法:car1.doors = 6;
也可以改變方法指標指向另一個方法:car1.showColor = changeColor;
綜合解決以上問題的方法:
4、聯合使用建構函式和原形方式:
- function Car(colors,doors){
- this.colors = colors;
- this.doors = doors;
- }
- Car.prototype.showColor = function showColor(){
- alert(this.color);
- };
- var car1 = new Car("red",4);
- var car2 = new Car("blue",6);
優點:這樣一來便很好地解決了上面的問題,在呼叫建構函式時,自定義自己的Car;也解決了方法複用的問題。
prototype就是“一個給類的物件新增方法的方法”,使用prototype屬性,可以給類動態地新增方法。
當你用prototype編寫一個類後,如果new一個新的物件,瀏覽器會自動把prototype中的內容替你附加在物件上。這樣,通過利用prototype就可以在JavaScript中實現成員函式的定義,甚至是“繼承”的效果。
http://blog.csdn.net/xiaoyuemian/archive/2009/01/20/3844305.aspx
- function Hotel () {
- this.hotelName = "";
- this.hotelId = "";
- this.star = "";
- this.city = "";
- this.zone = "";
- this.rooms = [];
- }
- // get and set zone
- Hotel.prototype.setZone = function (zone) {
- this.zone = zone;
- };
- Hotel.prototype.getZone = function () {
- return this.zone;
- };
- Hotel.prototype.setRooms = function (room) {
- this.rooms[this.rooms.length] = room;
- };
- Hotel.prototype.getRooms = function (idx) {
- return (idx >= 0 && idx < this.rooms.length) ? this.rooms[idx] : "";
- };
1、
- for(var i=0; i<recordList.length; i++){
- fileCtrl.addFileList.push(recordList[i]);
- fileCtrl.currFileList.push(recordList[i]);
- }
- alert(JSON.stringify(fileCtrl));
2、
- var fileObjArr = [];
- var length = _tr.length;
- _tr.not(":first").each(function(i){
- var qFile = new EipQuestionFile();
- qFile.setFileCode(filecode);
- qFile.setRemark(remark);
- fileObjArr[fileObjArr.length] = qFile;
- });
- $("#uploadFileList").val(JSON.stringify(fileObjArr));
- //否則無法講其作為Str傳輸過去
- function EipQuestionFile(){
- this.fileCode = '';
- this.remark = '';
- }
- EipQuestionFile.prototype.setFileCode = function (fileCode) {
- this.fileCode = fileCode;
- };
- EipQuestionFile.prototype.setRemark = function(remark){
- this.remark = remark;
- }
..
JS中建立物件的幾種常用方法:
1. 簡單物件字面量
這是最簡單的建立物件的方法,也是經常在入門書籍中看到的方法:
//建立一個簡單物件字面量
var person = {};
// 加入屬性和方法
person.name = 'ifcode';
person.setName = function(theName) {
person.name = theName;
}
非常簡單,但一般情況下不推薦這種方法。JS good parts書中認為這種寫法可讀性不夠強,作者推薦的是後面一種寫法。
2. 巢狀物件字面量
JS good parts中推薦這種寫法:
var person = {
name: 'ifcode',
setName: function(theName) {
this.name = theName;
}
}
這種寫法可讀性很強,person物件的所有屬性和方法都包含在其身體內,先的一目瞭然。
以上兩種寫法適用於只存在一個例項的物件,也就是某種意義上的singlton pattern。
下面介紹的幾種方法比較適用於建立多個物件例項。
3. 簡單建構函式
建構函式一般都符合factory pattern,根據預設的規則,建構函式應當首字母大寫:
Person = function(defaultName) {
this.name = defaultName;
this.setName = function(theName) {
this.name = theName;
}
}
person = new Person('ifcode');
利用建構函式就可以方便地建立多個物件例項了。
4. 使用原型(prototype)的建構函式
這裡簡單回顧一下prototype的作用。prototype或許是某種意義上最接近傳統OOP中class的東西了。所有建立在prototype上得屬性和方法,都將被所有物件例項分享。
Person = function(defaultName) {
this.name = defaultName;
}
Person.prototype.setName = function(theName) {
this.name = theName;
}
其實建立物件的方法還有很多,這些過於靈活的方法也是許多人在初接觸JS時感到困惑的原因。我個人比較偏向2和4:單一例項用2,多個例項用4。
相關文章
- JS 建立物件JS物件
- JS-建立物件JS物件
- JS_建立物件+呼叫物件方法JS物件
- js物件建立進階JS物件
- js 建立圖片物件JS物件
- js建立物件的方法JS物件
- js建立物件及其使用JS物件
- js建立物件的方式JS物件
- JS物件導向設計-建立物件JS物件
- JS中建立物件的方法JS物件
- js建立字典物件例項JS物件
- js正則建立物件方法JS物件
- [寫作中...]Js物件導向(2): 建立物件JS物件
- js物件導向設計---建立物件的方式JS物件
- js建立物件的幾種方式JS物件
- js中建立物件的幾種方式JS物件
- JS 建立例項物件的四種模式JS物件模式
- js中建立物件的幾種常用方式JS物件
- js建立XMLHttpRequest物件的程式碼例項JSXMLHTTP物件
- 淺談 JS 建立物件的 8 種模式JS物件模式
- 一個人就需要物件之js中八種建立物件方式物件JS
- JS 中物件的簡單建立和繼承JS物件繼承
- JS建立物件幾種不同方法詳解JS物件
- js建立物件的各種方法以及優缺點JS物件
- JS 基礎篇(一):建立物件的四種方式JS物件
- 淺談JS物件的建立、原型、原型鏈繼承JS物件原型繼承
- js Date()建構函式建立時間日期物件JS函式物件
- Three.js 新舊版本建立幾何物件差異JS物件
- 原生js如何建立相容所有瀏覽器的xmlhttp物件JS瀏覽器XMLHTTP物件
- 物件建立模式物件模式
- JavaScript建立物件JavaScript物件
- javascript 筆記03(建立物件/原型模式/js 繼承/BOM)JavaScript筆記物件原型模式JS繼承
- JavaScript物件與建立物件的方式JavaScript物件
- 如何用Map物件建立Set物件物件
- Java 中建立子類物件會建立父類物件麼?Java物件
- [js物件]JS入門之arguments物件JS物件
- [js物件]JS入門之Array物件JS物件
- Java物件建立模式Java物件模式