第三方库中有这样的功能:
(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
答案 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
对其进行实例化。