在另一个函数中调用一个“隐藏”的函数

时间:2014-07-19 11:38:17

标签: javascript jquery

第三方库中有这样的功能:

(function($) {
  window.NestedFormEvents = function() {
    this.addFields = $.proxy(this.addFields, this);
    this.removeFields = $.proxy(this.removeFields, this);
  };
//......
NestedFormEvents.prototype = {
    addFields: function(e) { .....
});

有没有办法从客户端拨打addFields()typeof window.NestedFormEvents会返回“function”,但window.NestedFormEvents.addFields会返回undefined以及window.NestedFormEvents.addFields()

源代码在这里:https://github.com/ryanb/nested_form/blob/master/vendor/assets/javascripts/jquery_nested_form.js

2 个答案:

答案 0 :(得分:1)

这是构造函数。当使用new关键字调用它时,它返回具有在构造函数原型中定义的方法的新对象:

var nestedFormEvent = new NestedFormEvents();
nestedFormEvent.addFields();

现在,如果您检查console.log(nestedFormEvent)对象,您将看到其中的所有必要方法。

答案 1 :(得分:1)

您正在调用addFields,就像它是NestedFormEvents的静态方法一样。

相反,它是一种原型的方法。所以:

var instance = new NestedFormEvents;
alert(NestedFormEvents.addFields); //undefined
alert(instance.addFields); //finds function

简而言之,只要您尝试使用函数原型上声明的方法,就需要使用new对其进行实例化。