直接与.extend直接为原型属性赋值的区别

时间:2017-06-21 06:54:24

标签: javascript jquery web

我遇到了两种样式,用于在Java脚本中编写相同的代码,并希望了解两者的优点或缺点。

以下是:

options = $.extend({
    property1 : value1,
    property2 : value2,                
}); 

VS

options = {
    property1 : value1,
    property2 : value2,
};
谷歌搜索时我发现如下:  1.0jQuery.extend( target [, object1 ] [, objectN ] )一个对象,如果传入其他对象,将接收新属性,如果它是唯一的参数,将扩展jQuery命名空间。

但任何人都可以帮助我理解: 1.使用$ .extend的好处是什么? 2.这条线的含义如下:  如果它是唯一的参数,它将扩展jQuery命名空间。

希望以上有意义!

1 个答案:

答案 0 :(得分:1)

您使用的第一种方法:

options = $.extend({
                property1 : value1,
                property2 : value2,                
            }); 

根据Jquery Documentation

如果只为$ .extend()提供了一个参数,这意味着省略了target参数。在这种情况下,jQuery对象本身被假定为目标。通过这样做,您可以向jQuery名称空间添加新功能。这对于希望向JQuery添加新方法的插件作者非常有用。

您将收到的选项是jquery对象本身。您的结果选项对象将表现为Jquery对象,您将无法直接访问键 property1 property2 。因为您已经扩展了 $ ,即 jQuery 对象本身。

然后,当您使用 $ 执行DOM操作或 JQuery 提供的其他功能时,您可以使用该选项。扩展的目的是为现有对象添加额外的道具。但是如果你不提供目标,它就把它假定为Jquery对象本身。

现在,

  options.trim(" Hello World "); // outputs Hello World without 
                                //leading or trailing spaces

P.S。表现得像 $

基本对象分配

options = {
        property1 : value1,
        property2 : value2,
    };

它只是基本的Javascript对象,行为正常。与上述情况不同,您可以使用点运算符访问属性。

如果将空白对象作为第一个参数传递为

,则可以实现上述相同的行为
options = $.extend({}, {
                    property1 : value1,
                    property2 : value2,                
                });

现在它将作为普通对象运行,因为您刚刚将空白目标对象与新属性合并。