自定物件 - 是可變的,由建立空白物件後,再加入功能
建立自定物件的方法(1)物件實字語法 (2)自訂建構式
物件實字語法 - var dog = { name:"名字", getname:function{ return name;} };
避免用物件建構式 new Object() 建立自己的物件,原因有...
1. 效能較差
2. Object 建構式可傳一個參數,會影響產生出物件的型別,如: new Object(3) => Number
自訂建構式 ( 命名慣例 - 手字母大寫 )
var Person = function ( name ) {
//var this = Object.create(Person.prototype); //背後的動作
this.name = name;
this.say = function () {
return "I am " + this.name ;
};
//return this; //背後的動作
//如果沒有 return 任一物件 , 背後會自動 return this , 如果 return 非物件 ( string , number , boolean ... ) 雖然不會發生錯誤 , 還是會 return this;
};
var vivian = new Person ("vivian"); //用自定建構式建立自定物件
vivian.say; // I am vivian
使用自定建構式一定要用 new MyObject() , 如果忘記 new , 在建構式中的 this 就會指向全域物件
也就是在瀏覽器中, this 就指向 window , 為了避免就種問題 , 可以改成
var Person = function ( name ) {
var that = {};
that.name = name;
that.say = function () {
return "I am " + that.name ;
};
return that;
//that 只是慣例 , 也可以用 self , me ...
};
還是有缺點, 這樣會失去與原型之間的連結
最好(建議)的方式
function Person ( arg ) {
if ( ! ( this instanceof arguments.callee ) ) { // 當函式被呼叫時 , 會產生 arguments
return new arguments.callee( arg );
}
//意思是 , 如果 this 的實體不是被呼叫者 ( 呼叫者忘了 new) , 就自動 new
//做點什麼事...
}