• 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>

    --

    -- 

  • 相关阅读:
    用于Transformer的6种注意力的数学原理和代码实现
    假设检验中的第一类错误和第二类错误
    2022 年 4 月 10篇 ML 研究论文推荐
    高斯朴素贝叶斯分类的原理解释和手写代码实现
    SQL 必知必会 50 题(1 5)
    那些年,我们一起做过的 Java 课后练习题(71 75)
    【UWP】实现一个波浪进度条
    springboot源码(八)
    springboot源码(五)
    springboot源码(一)
  • 原文地址:https://www.cnblogs.com/didi/p/1837819.html
Copyright © 2020-2023  润新知