带参数的原型

时间:2014-05-08 20:58:49

标签: javascript prototype

潜入JS原型我试图将参数传递给已经存在的函数。这就是结果。

chardinJs.prototype.start = function (txtTag) {
  this.infoTag = txtTag;
  var el, _i, _len, _ref;

  if (this._overlay_visible()) {
    return false;
  }
  this._add_overlay_layer();
  _ref = this.$el.find('*[' + infoTag + ']:visible');
  for (_i = 0, _len = _ref.length; _i < _len; _i++) {
    el = _ref[_i];
    this._show_element(el);
  }
  return this.$el.trigger('chardinJs:start');
};

最初没有&#39; txtTag&#39;作为一个参数,功能工作正常,但一旦我添加它,我收到一个错误&#34; $(...)。chardinJs.start不是一个函数&#34;。是什么给了什么?

PS:我正在尝试使用这样的功能:

$('form').chardinJs.start('data-info');

在修改之前,我正在使用这样的功能:

$('form').chardinJs('start');

1 个答案:

答案 0 :(得分:1)

您在原型上添加了start作为函数,但是您尝试从构造函数访问它,而不是从实例访问它。要通过原型调用它,您必须使用new关键字来创建实例:

(new ($('form').chardinJs())).start('data-info');

我不确定这是否会奏效。要按照您希望的方式调用它,您必须使start成为chardinJs的属性:

chardinJs.start = function (txtTag) {
    ...

但是,那也没有用,因为你失去了你的背景。

真的,为了完成你想要做的事情,你必须在调用chardinJs时将这些函数添加到jQuery对象中:

$.fn.chardinJs = function () {
    // your existing implementation
    this.start = chardinJsStart;  // reference your start function
    return this;
};

然后你可以这样做:

$('form').chardinJs().start('data-info');

另一个选择是保持它的工作方式,但是在方法名称之后传递方法参数:

$('form').chardinJs('start', 'data-info');
相关问题