

最近、javascriptを勉強しているものです。  
既存のプラグインを改変しようとしているのですが、  
オリジナルのソースをいじらずに改造できるかな？と模索しております。

関数を上書きするように自分の処理を挿入できるかな？と思っております。

なにか他にいい方法があればご教授願います。

よろしくお願いします。

HTMLソースです。

[code]

    <div id="hogehoge">
    </div>
    
[/code]

javascriptはこんなかんじです。

[code]

    <script>
    (
      function(arg)
      {
        arg(jQuery);
      }
      (
        function($)
        {
          function Hoge(element) {
            this.element = element;
            this.bazz();
          }
    
          Hoge.prototype.bazz = function() {
            var msg = this.foo();
            this.element.html("<h1>" + msg + "</h1>");
          }
    
          Hoge.prototype.foo = function() {
            var msg = "hello Japan"
            return msg;
          }
    
          $.fn.call_me = function() {
            hoge = new Hoge(this);
            return hoge;
          }
        }
      )
    );
    
    var local_hoge = $("#hogehoge").call_me();
    /*
      ここでlocal_hogeを使って、fooのmsgに" and America !"を追加したいです。
      嘘コード：
      local_hoge.prototype.foo = function(){ 
         var msg = super // 元のコードの呼び出しのつもり
         msg += " and America !";
         return msg;
      }
    */
    </script>
    
[/code]


CC BY-SA 3.0
2015-03-08T13:35:46.570
7618
2016-02-02T09:52:55.787
8475
question
javascript
javascriptのprototypeの使い方


書き換えをそのものがあまり良い方法ではありませんが、一応以下のようにして`prototype`の書き換えを行うことができます。

[code]

    (
        function(arg) {
            arg(jQuery);
        }
        (
            function($) {
                function Hoge(element) {
                    this.element = element;
                    this.bazz();
                }
    
                Hoge.prototype.bazz = function() {
                    var msg = this.foo();
                    this.element.html("<h1>" + msg + "</h1>");
                }
    
                Hoge.prototype.foo = function() {
                    var msg = "hello Japan"
                    return msg;
                }
    
                $.fn.call_me = function() {
                    hoge = new Hoge(this);
                    return hoge;
                }
            }
        )
    );
    
    var local_hoge = $("#hogehoge").call_me();
    
    (function(local_hoge) {
        var proto = Object.getPrototypeOf(local_hoge);
        var orig_func = proto.foo;
        proto.foo = function() {
            var msg = orig_func();
            msg += " and America !";
            return msg;
        };
    })(local_hoge);
    
    $("#hogehoge").call_me();
[/code]

[code]

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    
    <div id="hogehoge">
    </div>
[/code]


CC BY-SA 3.0
2015-03-09T03:03:19.887
7636
2015-03-09T03:03:19.887
3639
7618
answer