创建“类”实例时的回调
Callback when 'class' instance is created
var foo = (function(){
var c = function(requests) {
bar();
};
c.prototype = {
bar: bar
};
return c;
})();
var f = new foo();
f.baz(function(){
console.log('new instance of foo created');
});
http://jsfiddle.net/LecJM/
我想创建一个回调函数,该函数在创建"类"foo
的新实例时调用。这可能吗?显然上面的代码不会编译,我只是想让你了解我想要实现的目标。
var Foo = function (createdCallback) {
createdCallback();
return this;
};
var bar = new Foo(function () {
console.log("instance created");
});
这是您想要实现的目标吗?
像这样的东西?
var foo = (function(){
var c = function(requests) {
// Initialize your instance
// ...
// Notify
notifyCreated(this);
};
c.prototype = { ... };
var createdCallbacks = [];
c.onCreate = function(callback) {
createdCallbacks.push(callback);
}
function notifyCreated(instance) {
// Note: forEach requires ES5 or a shim
// Just use whatever you want to loop over the array
createdCallbacks.forEach(function(callback) {
callback(instance);
});
}
return c;
})();
// Add callback *before* creating instances
foo.onCreate(function(instance){
console.log('new instance of foo created', instance);
});
// Create an instance
var f = new foo();
基本上,您将方法添加到foo
(而不是foo.prototype
(以添加回调。在构造函数中,调用所有已注册的回调(此处使用单独的内部函数演示(。要使用,您首先注册回调,然后开始创建实例。
编辑:根据要求,只有一个回调:
var foo = (function(){
var c = function(requests) {
// Initialize your instance
// ...
// Notify
notifyCreated(this);
};
c.prototype = { ... };
// Use a dummy callback by default
var notifyCreated = function(){};
c.onCreate = function(callback) {
notifyCreated = callback;
}
return c;
})();
演示
编辑2:哎呀,如果你只需要一个回调,你不妨去掉onCreate
函数,只把回调作为一个变量公开。不过,这有一些缺点:
- 您无法
- 进行输入检查,例如,您无法在存储回调之前测试回调是否确实是一个函数。
- 其他人可以通过
foo.onCreate(anInstance)
外部触发回调。
如果这些没有问题(例如,如果您无论如何都不公开foo
(,请随意使用这个非常简单的片段:
var foo = (function(){
var c = function(requests) {
// Initialize your instance
// ...
// Trigger callback
c.onCreate(this);
};
c.prototype = { ... };
// Expose callback on "class"
c.onCreate = function(){};
return c;
})();
// Set callback *before* creating instances
foo.onCreate = function(instance){
console.log('new instance of foo created', instance);
};
// Create an instance
var f = new foo();
演示
试试这个
var foo = function() {
this.baz();
};
foo.prototype.baz = function () {
console.log('new instance of foo created');
};
var f = new foo();
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- google在类内映射javascript directionsService.route请求:将类实例传递给回调函数
- 如何在Promise回调中访问实例变量
- 具有不同回调处理程序的单一实例 Websockets 对象
- 创建“类”实例时的回调
- 如何在使用setTimeout回调时维护对实例的引用
- 处理多个组件实例的回调
- 对对象实例的JavaScript回调'未定义'
- Javascript在实例化后订阅回调函数
- Javascript -从$.post回调后,实例类的属性未定义
- javascript OOP中使用回调函数后如何设置实例变量
- 计算节点/ JavaScript MySQL回调中的错误实例
- 如何发送JQuery实例方法作为Google API回调
- 设置“this"到实例,在创建原型函数期间的回调集中
- SignalR JS hub代理的多个实例,实现多次函数回调
- 如何在 Javascript 中为回调提供执行函数对象实例