jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法


jquery订阅发布插件代码草稿!
jquery订阅发布插件代码草稿,为jquery扩展jquery.publish,jquery.subscribe方法

---

jquery订阅发布插件代码草稿
 
   
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html xmlns ="http://www.w3.org/1999/xhtml" >
< head >
< title > Hello </ title >
< link rel ="stylesheet" type ="text/css" href ="css/reset.css" />
< script type ="text/javascript" src ="js/jquery-1.4.2.js" ></ script >
<!--
<script type="text/javascript" src="js/init.js"></script>
-->
</ head >

< body >


< script type ="text/javascript" >



(
function ($) {

var opts = Object.prototype.toString;
$.global
= this ;

$.isString
= jQuery.fn.isString = function ( /* anything */ it) {
return ( typeof it == " string " || it instanceof String); // Boolean
}

$.isArray
= jQuery.fn.isArray = function ( /* anything */ it) {
return it && (it instanceof Array || typeof it == " array " ); // Boolean
}

$.isFunction
= jQuery.fn.isFunction = function ( /* anything */ it) {
return opts.call(it) === " [object Function] " ;
};

$.isObject
= jQuery.fn.isObject = function ( /* anything */ it) {
return it !== undefined &&
(it
=== null || typeof it == " object " || $.isArray(it) || $.isFunction(it)); // Boolean
}

$.isArrayLike
= jQuery.fn.isArrayLike = function ( /* anything */ it) {
return it && it !== undefined && // Boolean
! $.isString(it) && ! $.isFunction(it) &&
! (it.tagName && it.tagName.toLowerCase() == ' form ' ) &&
($.isArray(it)
|| isFinite(it.length));
}

$.isAlien
= jQuery.fn.isAlien = function ( /* anything */ it) {
return it && ! $.isFunction(it) && / \{\s*\[native code\]\s*\} / .test(String(it)); // Boolean
}

$._listener
= {
// create a dispatcher function
getDispatcher: function () {
return function () {
var ap = Array.prototype, c = arguments.callee, ls = c._listeners, t = c.target;
// return value comes from original target function
var r = t && t.apply( this , arguments);
// make local copy of listener array so it is immutable during processing
var i, lls;
lls
= [].concat(ls);

// invoke listeners after target function
for (i in lls) {
if ( ! (i in ap)) {
lls[i].apply(
this , arguments);
}
}
// return value comes from original target function
return r;
};
},
// add a listener to an object
add: function ( /* Object */ source, /* String */ method, /* Function */ listener) {
source
= source || $.global;
var f = source[method];
if ( ! f || ! f._listeners) {
var d = $._listener.getDispatcher();
d.target
= f;
// dispatcher holds a list of listeners
d._listeners = [];
// redirect source to dispatcher
f = source[method] = d;
}
return f._listeners.push(listener); /* Handle */
},
remove:
function ( /* Object */ source, /* String */ method, /* Handle */ handle) {
var f = (source || $.global)[method];
if (f && f._listeners && handle -- ) {
delete f._listeners[handle];
}
}
};

$.connect
= jQuery.fn.connect = function ( /* Object|null */ obj,
/* String */ event,
/* Object|null */ context,
/* String|Function */ method,
/* Boolean? */ dontFix) {
var a = arguments, args = [], i = 0 ;
args.push($.isString(a[
0 ]) ? null : a[i ++ ], a[i ++ ]);
var a1 = a[i + 1 ];
args.push($.isString(a1)
|| $.isFunction(a1) ? a[i ++ ] : null , a[i ++ ]);
for ( var l = a.length; i < l; i ++ ) { args.push(a[i]); }
return $._connect.apply( this , args); /* Handle */
}

$._connect
= function (obj, event, context, method) {
var l = $._listener, h = l.add(obj, event, $.hitch(context, method));
return [obj, event, h, l]; // Handle
}

$.disconnect
= jQuery.fn.disconnect = function ( /* Handle */ handle) {
if (handle && handle[ 0 ] !== undefined) {
$._disconnect.apply(
this , handle);
delete handle[ 0 ];
}
}

$._disconnect
= function (obj, event, handle, listener) {
listener.remove(obj, event, handle);
}

$._hitchArgs
= function (scope, method /* ,... */ ) {
var pre = $._toArray(arguments, 2 );
var named = $.isString(method);
return function () {
var args = $._toArray(arguments);
var f = named ? (scope || $.global)[method] : method;
return f && f.apply(scope || this , pre.concat(args)); // mixed
} // Function
}

var efficient = function (obj, offset, startWith) {
return (startWith || []).concat(Array.prototype.slice.call(obj, offset || 0 ));
};

$._toArray
=
/* $.isIE ? function (obj) */
$.browser.msie
? function (obj) {
return ((obj.item) ? slow : efficient).apply( this , arguments);
} :
efficient;

$.hitch
= jQuery.fn.hitch = function ( /* Object */ scope, /* Function|String */ method /* ,... */ ) {

if (arguments.length > 2 ) {
return $._hitchArgs.apply($, arguments); // Function
}
if ( ! method) {
method
= scope;
scope
= null ;
}
if ($.isString(method)) {
scope
= scope || $.global;
if ( ! scope[method]) { throw ([ ' $.hitch: scope[" ' , method, ' "] is null (scope=" ' , scope, ' ") ' ].join( '' )); }
return function () { return scope[method].apply(scope, arguments || []); }; // Function
}
return ! scope ? method : function () { return method.apply(scope, arguments || []); }; // Function
}

$._topics
= {};

$.subscribe
= jQuery.fn.subscribe = function ( /* String */ topic, /* Object|null */ context, /* String|Function */ method) {
return [topic, $._listener.add($._topics, topic, $.hitch(context, method))]; /* Handle */
}

$.unsubscribe
= jQuery.fn.unsubscribe = function ( /* Handle */ handle) {
if (handle) {
$._listener.remove($._topics, handle[
0 ], handle[ 1 ]);
}
}

$.publish
= jQuery.fn.publish = function ( /* String */ topic, /* Array */ args) {

var f = $._topics[topic];
if (f) {
f.apply(
this , args || []);
}
}

$.connectPublisher
= jQuery.fn.connectPublisher = function ( /* String */ topic,
/* Object|null */ obj,
/* String */ event) {

var pf = function () { $.publish(topic, arguments); }
return event ? $.connect(obj, event, pf) : $.connect(obj, pf); // Handle
};




})(jQuery);







function Tom(topic) {
this .topic = topic;
this .hello = function () {
alert(
" Hello,I'm Tom! " );

// Tom直接发布信息,不针对某个具体的目标
$.publish( this .topic);
}
}

function Jerry(topic) {
this .topic = topic;
this .hello = function () {
alert(
" Hello,I'm Jerry " );
}

// Jerry直接预订信息,但不针对某个具体的来源
$.subscribe( this .topic, this , " hello " );
}

var tom = new Tom( " /hello " );
var jerry = new Jerry( " /hello " );

tom.hello();


</ script >



</ body >
</ html >

 


--

-- 

转载于:https://www.cnblogs.com/didi/archive/2010/09/28/1837819.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值