문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 | |||
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; | + | |
- | }; | + | }; |
}()); | }()); | ||
</ | </ |