第6行和第10行调用同一个函数(在第12行),请问为什么调用参数的个数不同?1 (function($) {
2    $.fn.htmlarea = function(opts) {
3        if (opts && typeof (opts) === "string") {
4            var args = [];
5            for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
6            var htmlarea = jHtmlArea(this[0]);
7            var f = htmlarea[opts];
8            if (f) { return f.apply(htmlarea, args); }
9        }
10        return this.each(function() { jHtmlArea(this, opts); });
11    };12    var jHtmlArea = window.jHtmlArea = function(elem, options) {
        if (elem.jquery) {
            return jHtmlArea(elem[0]);
        }
        if (elem.jhtmlareaObject) {
            return elem.jhtmlareaObject;
        } else {
            return new jHtmlArea.fn.init(elem, options);
        }
    };
    jHtmlArea.fn = jHtmlArea.prototype = {        // The current version of jHtmlArea being used
        jhtmlarea: "0.7.0",        init: function(elem, options) {
            if (elem.nodeName.toLowerCase() === "textarea") {
                var opts = $.extend({}, jHtmlArea.defaultOptions, options);
                elem.jhtmlareaObject = this;

解决方案 »

  1.   

    参数的个数没有规定必须一样。
    function a(x,y){
    var x = x || 1,y = y || 2
    alert(x+y)
    }a()
    a(10)
    a(10,11)
      

  2.   

    谢谢!初学者,见笑:)请问第7行是不是创建一个新的jHtmlArea对象,并执行init数据?1 if (elem.jquery) {
    2   return jHtmlArea(elem[0]);
    3   }
    4   if (elem.jhtmlareaObject) {
    5   return elem.jhtmlareaObject;
    6   } else {
    7   return new jHtmlArea.fn.init(elem, options);
    8   }
    9   };
     
      

  3.   

    此外,请问第10行的两个this分别指哪个对象?1 (function($) {
    2 $.fn.htmlarea = function(opts) {
    3 if (opts && typeof (opts) === "string") {
    4 var args = [];
    5 for (var i = 1; i < arguments.length; i++) { args.push(arguments[i]); }
    6 var htmlarea = jHtmlArea(this[0]);
    7 var f = htmlarea[opts];
    8 if (f) { return f.apply(htmlarea, args); }
    9 }
    10 return this.each(function() { jHtmlArea(this, opts); });
    11 };