사용자 도구

사이트 도구


javascript:objectoriented

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
javascript:objectoriented [2011/12/02 21:23]
kwon37xi [setInterval]
javascript:objectoriented [2012/03/16 15:38]
kwon37xi
줄 139: 줄 139:
 </code> </code>
 위에서 ''A.prototype.start'' 함수를 보면된다. 위에서 ''A.prototype.start'' 함수를 보면된다.
 +
 +===== John Resig Class.extend =====
 +  * [[http://ejohn.org/blog/simple-javascript-inheritance/|John Resig - Simple JavaScript Inheritance]] : ''Class.extend({ ... });'' 로 간결하게 클래스 생성
 +<code javascript>
 +// "use strict"가 가능하도록 살짝 수정
 +/*
 + * Simple JavaScript Inheritance By John Resig http://ejohn.org/
 + * http://ejohn.org/blog/simple-javascript-inheritance/ MIT Licensed.
 + */
 +// Inspired by base2 and Prototype
 +(function () {
 +    "use strict";
 +
 +    var initializing = false, fnTest = /xyz/.test(function () {
 +        xyz;
 +    }) ? /\b_super\b/ : /.*/;
 +
 +    // The base Class implementation (does nothing)
 +    window.Class = function () { // edited for use strict
 +    };
 +
 +    // Create a new Class that inherits from this class
 +    Class.extend = function (prop) {
 +        var _super = this.prototype;
 +        // Instantiate a base class (but only create the instance,
 +        // don't run the init constructor)
 +        initializing = true;
 +        var prototype = new this();
 +        initializing = false;
 +
 +        var name;
 +
 +        // Copy the properties over onto the new prototype
 +        for (name in prop) {
 +            // Check if we're overwriting an existing function
 +            prototype[name] = typeof prop[name] === "function" && typeof _super[name] === "function"
 +                            && fnTest.test(prop[name]) ? (function (name, fn) {
 +                    return function () {
 +                        var tmp = this._super;
 +
 +                        // Add a new ._super() method that is the same method
 +                        // but on the super-class
 +                        this._super = _super[name];
 +
 +                        // The method only need to be bound temporarily, so we
 +                        // remove it when we're done executing
 +                        var ret = fn.apply(this, arguments);
 +                        this._super = tmp;
 +
 +                        return ret;
 +                    };
 +            }(name, prop[name])) : prop[name];
 +        }
 +
 +        // The dummy class constructor
 +        function Class() {
 +            // All construction is actually done in the init method
 +            if (!initializing && this.init)
 +                this.init.apply(this, arguments);
 +        }
 +
 +        // Populate our constructed prototype object
 +        Class.prototype = prototype;
 +
 +        // Enforce the constructor to be what we expect
 +        Class.prototype.constructor = Class;
 +
 +        // And make this class extendable
 +        Class.extend = window.Class.extend; // edited for use strict
 +
 +        return Class;
 +    };
 +}());
 +</code>
 +
 +<code javascript>
 +// 용례
 +
 +var Person = Class.extend({
 +  init: function(isDancing){
 +    this.dancing = isDancing;
 +  },
 +  dance: function(){
 +    return this.dancing;
 +  }
 +});
 +
 +var Ninja = Person.extend({
 +  init: function(){
 +    this._super( false );
 +  },
 +  dance: function(){
 +    // Call the inherited version of dance()
 +    return this._super();
 +  },
 +  swingSword: function(){
 +    return true;
 +  }
 +});
 +
 +var p = new Person(true);
 +p.dance(); // => true
 +
 +var n = new Ninja();
 +n.dance(); // => false
 +n.swingSword(); // => true
 +
 +// Should all be true
 +p instanceof Person && p instanceof Class &&
 +n instanceof Ninja && n instanceof Person && n instanceof Class
 +
 +</code>
 +
javascript/objectoriented.txt · 마지막으로 수정됨: 2012/03/16 15:38 저자 kwon37xi