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 回答