向对象内部的函数传递参数
Passing parameters to function inside object
我首先获得一个元素:
var i=document.getElementsByTagName("fieldset");
然后创建一个新对象:
var a=new Fieldset(i[0]);
函数原型如下:
slideDown: function() {
alert("here");
}
构造函数如下:
function Fieldset(fieldset){
this.fieldset=fieldset;
this.fieldset.addEventListener("click",this.slideDown(this.fieldset),false);
};
问题是在创建新对象时立即调用slideDown
函数,并且侦听器没有附加到元素。
我已经在构造函数的字段集前面和没有this
的情况下为侦听器完成了代码,但无济于事。我只是不知道我在哪里摸不着头绪。
在这个表达式中
this.fieldset.addEventListener("click",this.slideDown(this.fieldset),false);
slideDown()
在 addEventListener()
之前被称为,因为参数是在函数调用之前求值的。
你的意思可能是传递一个函数对象作为第二个参数,而不是传递一个由slideDown()
返回的值(它无论如何都不返回任何东西)。你可以这样构造这样一个函数对象:
function Fieldset(fieldset){
this.fieldset=fieldset;
var self = this; // stash "this" for use inside listener below.
var listener = function() {
self.slideDown(fieldset);
};
this.fieldset.addEventListener("click", listener, false);
};
我们使用变量self
来存储this
的值。请注意,this
在listener
中不再可用。
您可以将事件处理程序封装在一个匿名函数中:
JS Fiddle
var i=document.getElementsByTagName("fieldset");
var a=new Fieldset(i[0]);
function Fieldset(fieldset){
this.fieldset=fieldset;
this.slideDown = function() {
alert("here");
}
var f = this;
this.fieldset.addEventListener("click", function() {
f.slideDown(f.fieldset)
},false);
};
(function (el, h) {
el.addEventListener("click", function () {h(el);}, false);
})(this.fieldset, this.slideDown);
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 函数未将值作为参数传递
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 为什么不'我们在javascript中使用函数参数的数据类型
- 你好,这是测试用例,我必须在函数中传递n个参数
- JavaScript - 多参数函数,它是多个图像库的字符串
- 如何从两个参数函数返回随机整数
- 以无点风格在Ramda中编写一个无参数函数
- JS:将单参数函数转换为可链接函数
- 正则表达式类似于Javascript中的参数函数
- 将 $' 值传递给替换的关联参数函数
- "这个“;在参数函数中
- 如何向jquery插件发送参数函数
- 将参数函数Node.js从一个js传递到另一个js
- 如何在javascript参数函数中传递PHP post方法字符串
- 装饰 Javascript Promise.then 以便参数函数接收附加参数
- 正在分析setInterval ID'是的's参数函数
- 如何根据一个参数函数计算年龄
- 对象参数/函数和/或三元运算符混淆