1.2.8.7.來使用我們的框架吧

  • 加上分號可以避免前一個framework沒有加上分號

;(function (global, $) {
    //不需要每次都使用new
    var Greetr = function (firstname, lastname, language) {
        return new Greetr.init(firstname, lastname, language)
    }

    var supportedLangs = ['en', 'es'];

    var greetings = {
        en: 'Hello',
        es: 'Hola'
    };

    var formalGreetings = {
        en: 'Greetings',
        es: 'Saludos'
    };

    var logMessage = {
        en: 'Logged in',
        es: 'dfdsfdsf'
    };

    //* 原型物件中的this會指向物件本身
    Greetr.prototype = {
        fullName: function(){
            return this.firstname + ' ' + this.lastname;
        },
        validate: function(){
           if (supportedLangs.indexof(this.language) === -1) {
               throw "Invalid language";
           }
        },
        greeting: function() {
            return greetings[this.language] + this.fistname + '!';
        },
        formalGreeting: function() {
            return formalGreetings[this.language] + this.fistname + '!';
        },
        //可鍊結的方法
        greet: function(formal) {
            var msg;
            if (formal) {
                msg = this.formalGreeting();
            } else {
                msg = this.greeting();
            }

            if (console) {
                console.log(msg);
            }
            return this
        },
        log: function() {
            if (console) {
                console.log(logMessage[this.language]);
            }
            return this;
        },
        setLang: function(lang) {
            this.language = lang;
            this.validate();
        }
    };
    //用new建構子呼叫時, this會指向新建立的空物件
    Greetr.init = function (firstname, lastname, language) {
    var self = this;
        self.firstname = firstname || '';
        self.lartname = lastname || '';
        self.language = language || 'en';
    }
    //由Greetr.init所建立的物件應該指向Greetr.prototype作為原型鍊
    Greetr.init.prototype = Greetr.prototype;
    //IIFE外面的Greetr(別名G$)會指向Greetr
    global.Greetr = global.G$ = Greetr;

}(window, jQuery));

Last updated