문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 | |||
|
javascript:objectoriented [2012/03/16 15:37] kwon37xi |
javascript:objectoriented [2012/03/16 15:38] (현재) kwon37xi |
||
|---|---|---|---|
| 줄 150: | 줄 150: | ||
| // Inspired by base2 and Prototype | // Inspired by base2 and Prototype | ||
| (function () { | (function () { | ||
| - | "use strict"; | + | |
| - | var initializing = false, fnTest = / | + | |
| - | xyz; | + | xyz; |
| - | }) ? / | + | }) ? / |
| - | // The base Class implementation (does nothing) | + | |
| - | window.Class = function () { // edited for use strict | + | window.Class = function () { // edited for use strict |
| - | }; | + | }; |
| - | // Create a new Class that inherits from this class | + | |
| - | Class.extend = function (prop) { | + | Class.extend = function (prop) { |
| - | var _super = this.prototype; | + | var _super = this.prototype; |
| - | // Instantiate a base class (but only create the instance, | + | // Instantiate a base class (but only create the instance, |
| - | // don't run the init constructor) | + | // don't run the init constructor) |
| - | initializing = true; | + | initializing = true; |
| - | var prototype = new this(); | + | var prototype = new this(); |
| - | initializing = false; | + | initializing = false; |
| - | var name; | + | |
| - | // Copy the properties over onto the new prototype | + | |
| - | for (name in prop) { | + | for (name in prop) { |
| - | // Check if we're overwriting an existing function | + | // Check if we're overwriting an existing function |
| - | prototype[name] = typeof prop[name] === " | + | prototype[name] = typeof prop[name] === " |
| - | && fnTest.test(prop[name]) ? (function (name, fn) { | + | && fnTest.test(prop[name]) ? (function (name, fn) { |
| - | return function () { | + | return function () { |
| - | var tmp = this._super; | + | var tmp = this._super; |
| - | // Add a new ._super() method that is the same method | + | |
| - | // but on the super-class | + | // but on the super-class |
| - | this._super = _super[name]; | + | this._super = _super[name]; |
| - | // The method only need to be bound temporarily, | + | |
| - | // remove it when we're done executing | + | // remove it when we're done executing |
| - | var ret = fn.apply(this, | + | var ret = fn.apply(this, |
| - | this._super = tmp; | + | this._super = tmp; |
| - | return ret; | + | |
| - | }; | + | }; |
| - | }(name, prop[name])) : prop[name]; | + | }(name, prop[name])) : prop[name]; |
| - | } | + | } |
| - | // The dummy class constructor | + | |
| - | function Class() { | + | function Class() { |
| - | // All construction is actually done in the init method | + | // All construction is actually done in the init method |
| - | if (!initializing && this.init) | + | if (!initializing && this.init) |
| - | this.init.apply(this, | + | this.init.apply(this, |
| - | } | + | } |
| - | // Populate our constructed prototype object | + | |
| - | Class.prototype = prototype; | + | Class.prototype = prototype; |
| - | // Enforce the constructor to be what we expect | + | |
| - | Class.prototype.constructor = Class; | + | Class.prototype.constructor = Class; |
| - | // And make this class extendable | + | |
| - | Class.extend = window.Class.extend; | + | Class.extend = window.Class.extend; |
| - | return Class; | + | |
| - | }; | + | }; |
| }()); | }()); | ||
| </ | </ | ||