物件導向語言旨意在於模擬現實世界中人類的思考模式(雖然很多人不以為然),每個物件都會有方法與屬性,藉此賦予一個物件的職責,操縱物件工作,可說是傳達一個message給物件,物件收到訊息後便可進行對應的動作,再視情況把訊息傳回給呼叫者(caller/invoker)。
JavaScript中,如果要將類別定義方法,可以寫成:
var Class = function () { var klass = function () { 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)的概念,也是下一次的主題。
全站熱搜
留言列表