物件導向語言旨意在於模擬現實世界中人類的思考模式(雖然很多人不以為然),每個物件都會有方法與屬性,藉此賦予一個物件的職責,操縱物件工作,可說是傳達一個message給物件,物件收到訊息後便可進行對應的動作,再視情況把訊息傳回給呼叫者(caller/invoker)。

JavaScript中,如果要將類別定義方法,可以寫成:

var Class = function () {
    var klass = function () {
        //In constructor, any referernce to the instance method, must prefix with "this."
        this.init.apply(this, arguments);
    };
    klass.prototype.init = function (attrs) {
        for(var attr in attrs){
            this[attr] = attrs[attr];
        }
    };
    //short cuts:
    klass.fn = klass.prototype;
    klass.fn.parent = klass;

    //extend the Class-level properties:
    klass.extend = function (obj) {
        //If the parameter contains extended(), invoke it as callback
        var extended = typeof obj.extended === 'function' ? obj.extended : null;
        for (var attr in obj) {
            klass[attr] = obj;
        }
        if (extended !== null) {
            extend(klass);
        }
    };

    //extend the instance-level properties:
    klass.include = function (obj) {
        //If the parameter contains included, invoke it as callback
        var included = typeof obj.included === 'function' ? obj.included : null;
        for (var attr in obj) {
            klass.fn[attr] = obj[attr];
        }
        if (included !== null) {
            included(klass);
        }
    };

    return klass;
};

var Person = new Class();
Person.include({
    name: '',
    eat: function () {
        console.info('Eat food, ' + this.name + '!');
    }
});
var bob = new Person();
bob.name = 'Bob';
var mary = new Person();
mary.name = 'Mary';

bob.eat();
mary.eat();

 如果希望模擬更為細緻的結構,像是:

男人是人類的一種、大衛是男人、男人都喜歡放屁、所以大衛也喜歡放屁

那麼就需要使用到繼承(inheritance)的概念,也是下一次的主題。

arrow
arrow
    文章標籤
    javascript MVC OOP
    全站熱搜

    鍾協良 發表在 痞客邦 留言(0) 人氣()