我的印象是我可以使用bind
将参数传递给函数,然后调用这些参数,就好像它们已经正常传递一样。为什么我需要这样做:
$(document).ready(function() {
var func = function(button) {
button[0].on('click', function() {
alert('Hello World.');
})
}
func.bind(null, [$('.button')])();
});
看起来我应该能够这样做:
$(document).ready(function() {
var func = function(button) {
button.on('click', function() {
alert('Hello World.');
})
}
func.bind(null, [$('.button')])();
});
示例,将button
参数视为数组:
$(document).ready(function() {
var func = function(button) {
button[0].on('click', function() {
alert('Hello World.');
})
}
func.bind(null, [$('.button')])();
});
html, body, div {
padding:0;
margin:0;
display:flex;
justify-content:center;
}
.button {
background-color:gray;
margin:50px;
padding:50px;
width:50%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="button">Button</div>
答案 0 :(得分:3)
bind()
用于将当前调用范围绑定到一个函数,这样即使你从其他地方调用它,它也会知道该绑定范围内的局部变量。
您正在寻找的是apply()
。
var func = function(button) {
button.on('click', function() {
console.log('hello world');
});
}
func.apply(this, [$('.button')]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="button">Click Me</button>
&#13;
为了完整性,还有一个更常用的call()
函数。它使用初始范围参数之后的参数列表而不是参数数组。
func.call(this, $('.button'));
答案 1 :(得分:2)