当前位置:嗨网首页>书籍在线阅读

42-讨论

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.10.3 讨论

在本秘诀中,使用jQuery提供的 $.extend() 方法。 $.extend() 返回对传入的第一个对象的引用,稍后的对象将重写它们所定义的任何属性。下列代码演示了实际的工作方式:

var obj = { hello: 'world' };
obj = $.extend(obj, { hello: 'big world' }, { foo: 'bar' });
alert( obj.hello ); //显示警告'big world'
alert( obj.foo ); // 显示警告'bar';

这使得本秘诀中的 myPlugin() 可以接受一个 options 对象,由它覆盖默认设置。下列代码展示了最终用户覆盖默认的CSS color 设置的方法:

$('div').myPlugin({ css: { color: 'blue' } });

$.extend() 方法的一个特殊情况是,当参数是一个对象时,它将扩展基本jQuery对象。因此,可以这样定义自己的插件,以扩展jQuery核心:

$.fn.extend({
   myPlugin: function() {
     options = $.extend({
        message: 'Hello world',
        css: {
          color: 'red'
        }
     }, options);
     return this.each(function() {
        $(this).css(options.css).html(options.message);
     });
   }
});

$.extend() 还提供了一个深(递归)拷贝的机制。这通过传递布尔值true作为第一个参数来实现。下面是深拷贝的一个例子:

var obj1 = { foo: { bar: '123', baz: '456' }, hello: 'world' };
var obj2 = { foo: { car: '789' } };
var obj3 = $.extend( obj1, obj2 );

当没有传递true参数时, obj3 的内容如下:

{ foo: { car: '789 }, hello: 'world' }

如果指定深拷贝, obj3 在递归复制所有属性之后的内容如下:

var obj3 = $.extend( true, obj1, obj2 );
// obj3
{ foo: { bar: '123', baz: '456', car: '789 }, hello: 'world' }