4

我有一个prototype.js 类,我想扩展它以添加一些新函数并覆盖已经存在的几个函数。

在下面的示例中,我想添加 initAutocompleteNew 并编辑 initAutocomplete 以提醒“新”。

Varien.searchForm = Class.create();
Varien.searchForm.prototype = {
    initialize : function(form, field, emptyText){
        this.form   = $(form);
        this.field  = $(field);
        this.emptyText = emptyText;

        Event.observe(this.form,  'submit', this.submit.bind(this));
        Event.observe(this.field, 'focus', this.focus.bind(this));
        Event.observe(this.field, 'blur', this.blur.bind(this));
        this.blur();
    },
//////more was here

    initAutocomplete : function(url, destinationElement){
            alert("old");
    },
}

有人建议,但这不起作用我认为它是 jQuery 吗?

$.extend(obj_name.prototype, {
    newfoo : function() { alert('hi #3'); }
}
4

1 回答 1

7

这篇文章应该有所帮助: http: //prototypejs.org/learn/class-inheritance

看起来您正在以“旧”方式定义您的类,如该页面上的第一个示例中所述。你用的是1.7吗?

假设您使用的是 1.7,如果您想覆盖或添加方法到您的类,您可以使用Class.addMethods

Varien.searchForm.addMethods({
  initAutocomplete: function(url, destinationElement) {
    // Your new implementation
    // This will override what was previously defined
    alert('new');
  },
  someNewMethod: function() {
    // This will add a new method, `someNewMethod`
    alert('someNewMethod');
  }
});

这是一个小提琴:http: //jsfiddle.net/gqWDC/

于 2012-04-27T00:59:47.983 回答