$ .addMessage = function(){和$ .fn.addMessage = function(){之间的区别是什么?

时间:2012-10-29 07:31:53

标签: javascript typescript

我意识到一个人是原型可以有人告诉我这两者之间的区别吗?

$.addMessage = function () { 

$.fn.addMessage = function () {

从我可以看到,一个扩展JQuery和其他JQueryStatic在typescript

interface JQuery {
    addMessage();
}

interface JQueryStatic {
  addMessage();
}

1 个答案:

答案 0 :(得分:4)

如果添加功能

$.addMessage = function(){

您可以稍后以

的身份访问该功能
$.addMessage()

从语义上讲,该函数与特定的jQuery实例无关,可以被视为Java中等效的静态方法(属于一个类)。


如果添加功能

$.fn.addMessage = function(){

由于jQuery将$ .fn定义为$ .prototype的别名,这相当于

$.prototype.addMessage = function(){

Javascript会自动将Class.prototype指定为使用new Class()创建的对象的原型。 $(...)在内部使用new $(...),这意味着它会使用$作为构造函数创建新对象。这意味着$.fn.addMessage也可以作为

访问
$(".messageContainer").addMessage()

从语义上讲,$.fn.addMessage与特定的jQuery实例有关。这意味着this函数中的addMessage不是$.fn,而是$(...)。因此,$.fn可以被视为Java中等同于实例方法(属于实例)。


换句话说,如果您将函数声明为

$.addMessage = function(){ 

,您将其用作

$.addMessage()

如果您将其声明为

$.fn.addMessage = function(){

,您将其用作

$(".messageContainer").addMessage()