1

まあ、これは本当に面白いと思います。もちろん、これよりも少し先にコードを掘り下げてみると、彼らがどうやってそれを実行できるかは確かにわかります。私が話しているのはJQueryライブラリです。以下のコードを見てください-

 $.prototype.mymethod=function(str){
    alert(str);
}

//now call the added method
$(document).mymethod('hello') //alert out hello

が純粋な通常のjavascript関数(jqueryライブラリを使用しない)の場合、キーワードが前に付加さ$れていない限り、追加されたメソッドは期待どおりに機能しませんnew$

new $(document).mymethod('hello')

しかし、JQueryでは、newキーワードは非常にオプションです!

私が彼らの図書館を調べなくても、誰かがそれをどのように行ったかについて、より多くの洞察を与えることができますか?

編集:苦労した後、最後に、上記がどのように機能するか(new キーワードを使用せずにJavaScriptオブジェクトを構築する)の実際のルートメカニズムを掘り下げました!これは、高度なJavaScriptを学びたいと思っている人にとっては良い参考になると思います。

function a(){
    return a.prototype;
}
a.prototype.fn=function(){
    alert('hello')
}

a.prototype.test=123;

console.log(a().test)//123 
a().fn()//alerts out hello
4

1 に答える 1

3

ソースコードから:

jQuery = function( selector, context ) {
    // The jQuery object is actually just the init constructor 'enhanced'
    return new jQuery.fn.init( selector, context, rootjQuery );
},

を呼び出すと、newはすでに呼び出されています$(document)

jQueryの方法で同じことをしたい場合は、次のようになります。

var A = function(str){
    return new A.prototype.init(str);
}
A.prototype.init =function(str){
     this.str = str;
     return this;
};
A.prototype.init.prototype = A.prototype;

A.prototype.f = function(arg){ // add your function
   console.log(this.str+' '+arg);
};
A('hello').f('world'); // logs "hello world"
A('bye').f('bye'); // logs "bye bye"
于 2013-03-15T18:12:41.140 に答える