1.2.4.4.Reflection 與 Extend

  • 反射 (reflection)

    • 一個物件可以看到自己的東西, 然後改變自己的屬性跟方法

    var person = {
        firstname: 'Default',
        lastname: 'Default',
        getFullName: function(){
            return this.firstname + ' ' + this.lastname;
        }
    }

    var john = {
        firstname: 'John',
        lastname: 'Doe'
    }

    //don't do this
    john.__proto__ = person;

    //將會遍歷這個物件的所有屬性跟方法
    //印出:
    //firstname: 'Default',
    //lastname: 'Default',
    // getFullName: function(){
    //       return this.firstname + ' ' + this.lastname;
    // }
    for (var prop in John) {
        console.log(prop + ': ' + john[prop]);
    }

    //確認prop是否是John所擁有的
    for (var prop in John) {
        if (John.hasOwnProperty(prop)) {
            console.log(prop + ': ' + john[prop]);
        }
    }

    var jane = {
        address: '111 Main St',
        getFormalFullName: function(){
            return this.lastname + ' ' + this.firstname;
        }
    }
    var jim = {
        getFirstName: function(){
            return this.firstname;
        }
    }

    //把所有的屬性與方法放到john
    _.extend(john, jane, jim)

Last updated