1

ラッパー内にプロトタイプ ヘルパー メソッドのコレクションを構築する作業を行っています。ただし、使いやすさのために、同じ呼び出しでオブジェクトを新しいインスタンスと単一のグローバル インスタンスの両方として呼び出すことができるようにしたいと考えています。

たとえば、jQuery を使用すると、"$" と "$()" の両方を呼び出して、異なる方法で使用できますhttp://learn.jquery.com/using-jquery-core/dollar-object-vs-function/ :

簡単な例としてベローを考えると、どうすれば同様のことができますか?

(function () {

        var myWrapper = function (foo) {
            return new helper(foo);
        };

        var helper = function (foo) {
           this[0] = foo;
           return this;
        }

        helper.prototype = {
            putVar: function(foo) {
               this[0] = foo;
            }
        }

        if(!window.$) {
            window.$ = myWrapper;
        }

})();

// create an new instace;
var instance = $("bar");
console.log(instance);

// call a prototype method
instance.putVar("foo");
console.log(instance);

// call a prototype method using the same call without new instance 
// this doesnt work :(
$.putVar("foo");

// however this will work
window.myLib = $("foo");
myLib.putVar("bar");

http://jsfiddle.net/2ywsunb4/

4

1 に答える 1