사용자 도구

사이트 도구


javascript:objectoriented

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
마지막 판 양쪽 다음 판
javascript:objectoriented [2011/12/02 21:23]
kwon37xi [setInterval]
javascript:objectoriented [2012/03/16 15:37]
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