Javascript &引用;这";指向窗口,而不是回调函数后的原型函数
我有这个原型功能Javascript &引用;这";指向窗口,而不是回调函数后的原型函数,javascript,callback,prototype,this,Javascript,Callback,Prototype,This,我有这个原型功能 (function(window, undefined){ function Waypoint (el, callback, offset){ this.el = el; this.cb = callback; this.offset = offset || 0; window.optimizedScroll.add(this.passedWaypoint); //window.optimi
(function(window, undefined){
function Waypoint (el, callback, offset){
this.el = el;
this.cb = callback;
this.offset = offset || 0;
window.optimizedScroll.add(this.passedWaypoint);
//window.optimizedScroll.add(this.passedWaypoint.call(this)); doesn't work
}
Waypoint.prototype.passedWaypoint = function(){
//if element passes a point execute the callback function
//this.cb(); //undefined
console.log(this); //refers to window and not to my obj
};
window.Waypoint = Waypoint;
})(this);
var myElement1 = new Waypoint("myElement", function(){
console.log("i have traveled so far");
});
这是从这个页面优化的滚动
(我只更改了滚动调整大小)
当我滚动时,回调函数被执行,但是我对小词“this”有一个问题。我如何才能做到“this”指的是我的obj而不是window。我玩了“呼叫”,但我没有得到它
gregor,@MysterX的评论是正确的;) 不是我试过的“打电话”
谢谢!!;) 传递回调时,使用callback.bind(this)可能会重复
var optimizedScroll = (function(window, undefined) {
var callbacks = [], running = false;
// fired on resize event
function scroll() {
if (!running) {
running = true;
window.requestAnimationFrame(runCallbacks);
}
}
// run the actual callbacks
function runCallbacks() {
callbacks.forEach(function(callback) {
callback();
});
running = false;
}
// adds callback to loop
function addCallback(callback) {
if (callback) {
callbacks.push(callback);
}
}
return {
// public method to add additional callback
add: function(callback) {
if (!callbacks.length) {
window.addEventListener('scroll', scroll);
}
addCallback(callback);
}
};
})(this);
window.optimizedScroll.add(this.passedWaypoint.bind(this));