close

自定物件 - 是可變的,由建立空白物件後,再加入功能

建立自定物件的方法(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

    //做點什麼事...

}

 

arrow
arrow
    全站熱搜

    vivian 發表在 痞客邦 留言(0) 人氣()