我想知道如何将回调函数的第一个参数设置为我想要的,就像jquery在成功回调或完整回调中所做的那样
我想这样做:
$.ajax({
success: function(data) {
alert(data)
}
});
从我的理解,这就像我能达到我想要的那样接近
function test(text) {
this.text = text
this.success = function(this.text) { }
}
var a = new test('King Kong')
a.success = function(k){
alert(k)
}
我希望警报说“金刚”
答案 0 :(得分:7)
这是一个在构造函数中接受回调然后在响应某个触发器时调用它的示例。在下面,触发器是有人调用trigger
函数,但它可以是你想要的任何东西:
function Test(text, callback) {
this.text = text;
this.success = callback;
}
Test.prototype.trigger = function() {
// Call the success callback, passing in the text
this.success(this.text);
};
var a = new Test('King Kong', function(k) {
alert(k);
});
a.trigger();
(我已经使Test
最初限制在那里。这是构造函数的约定,你当然可以自由忽略。)
要理解的关键,基本要素是函数就像对象一样。您可以向它们传递对它们的引用等。要调用函数,您只需访问存储函数引用的任何变量并添加括号(可选择在括号中使用函数的参数)。
因此,以下所有调用foo
函数并触发警报:
function foo(msg) {
alert(msg);
}
var f = foo; // No parens, just getting the function reference, not calling it
f("Hi there"); // Now we're calling it
var a = {};
a.nifty = f;
a.nifty("Hi again");
function bar(func) {
func("Hello for the third time");
}
bar(foo); // Passing a reference to `foo` into the `bar` function, which will call it
高级:现在,jQuery做的一件事是它调用回调,并将this
值设置为特定的值(通常是与调用相关的DOM元素)。只要您通过对象属性调用函数,就会发生这种情况:
var a = {name: "Fred"};
a.func = function() {
alert(this.name);
};
a.func(); // alerts "Fred"
......但这不是你能做到的唯一方法;函数对象本身也有call
和apply
函数:
var a = {name: "Fred"};
function func() {
alert(this.name);
}
func.call(a); // alerts "Fred"
在那里,该函数未分配给任何a
的属性,但我们使用call
调用该函数,该函数接受this
的值作为其第一个论点。调用还会传递您正在调用的函数的任何其他参数:
function func(msg1, msg2) {
alert(this.name + " says " + msg1 + " and " + msg2);
}
var a = {name: "Fred"};
func.call(a, "one", "two"); // alerts "Fred says one and two"
apply
做了完全相同的事情,但它接受将参数传递给基础函数作为数组而不是作为离散参数:
function func(msg1, msg2) {
alert(this.name + " says " + msg1 + " and " + msg2);
}
var a = {name: "Fred"};
func.apply(a, ["one", "two"]); // alerts "Fred says one and two"
// ^------------^----- note these args are now an array
更多阅读:Mythical Methods
答案 1 :(得分:0)
我想出了我在找什么,就是这个
function Test(data)
{
data.success(data.text)
}
var a = new Test({
text : 'DATA',
success : function(k) {
alert(k)
}
})
或
function Test()
{
this.setText = function(k) {
this.text = k
}
this.setCall = function(k) {
this.call = k
this.call(this.text)
}
}
var a = new Test
a.setText('DATA')
a.setCall(function(k) {
alert(k)
})
警告“数据”