繁体   English   中英

是否可以将参数传递给设置为对象文字值的函数?

[英]Can a parameter be passed to a function that is set as an object literal value?

我有一个函数functionWithDifferentScope ,该函数将对象myobject.options作为参数。 options对象中的一对对象是回调,它指向myObject中定义的函数: myCallback

我要实现的目标是将myObject 命名空间注入到在全局级别(由第3方定义)的函数的回调中。

一个简化的例子:

var myObject = {
    options: {
        callback: this.myCallback(this),
        ...,
    },

    init: function() {
        // functionWithDifferentScope operates in the 'window' context
        functionWithDifferentScope(this.options);
    },

    myCallback: function(namespace) {
        // 'this' is window
        // 'namespace' is myObject
    }
}

myObject.init();

执行此脚本时, this.myCallback(this)似乎在定义时执行(由于括号?); 以及一次myObject.init(); 被校准。 在第一次处决myObject的 ,而是通过functionWithDifferentScope后续调用标识窗口

有没有办法将myObject 命名空间作为参数传递给myObject.options.callback值?

我认为您正在寻找的是原型样式“绑定”

基本上,“ this.myCallback(this)”是对该函数的调用。

this.myCallback是函数本身。 (它是带有类型函数的对象)。

您可以使用可以在函数上使用的方法“ call”或“ apply”来调用它。 将调用这些函数。

看到:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/call

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/apply?redirectlocale=zh-CN&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fapply

第一个参数是要使用的对象上下文。我认为您所说的对象名称空间是什么。

因此: a.callback(5)a.callback.call(a,5)

但是请注意,这些天,如果您使用的是大多数javascript库,则可能有一个“绑定”功能可以为您完成工作。

http://prototypejs.org/doc/latest/language/Function/prototype/bind/

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

这个想法是this.callback.bind(this)返回一个您可以调用的Function对象,该对象将自动注入正确的上下文,因此您可以单独将bind的返回值作为回调传递,并确保该方法将在正确的对象。

你是这个意思吗

var myObject = new (function() {
    var t = this;

    vac callback = function() {
        // t equals to the myObject-instance
        // this equals to window
    }

    this.init = function() {
        funcWithDifferencScope(callback);
    }
})();

myObject.init();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM