gpt4 book ai didi

javascript - 使用 Function.prototype.bind.apply(Obj, args) 将参数传递给对象,仅传递第一个元素

转载 作者:行者123 更新时间:2023-12-03 07:28:58 26 4
gpt4 key购买 nike

我有一个包装类(单例),如下所示:

'use strict'

var _ = require('lodash')

var SDK = {
isInitialized: false,
isSharedInstance: true,
initSharedInstance: function() {
var args = Array.prototype.slice.call(arguments)
var self = this
if (self.isInitialized) {
console.log('SDK shared instance is already initialized')
return self
}
var SDKClient = require('./lib/client')
console.log('parent', args)
var client = Function.prototype.bind.apply(SDKClient, args)
_.assign(self, client)
Object.setPrototypeOf(self, new client())
self.isInitialized = true
self.isSharedInstance = true
self.SDKQuery = require('./lib/query')
}
}

SDK.init = SDK.initSharedInstance
module.exports = SDK

到 SDK 客户端类:

'use strict'

var _ = require('lodash')

var defaultOptions = {
baseUrl: 'url'
}

var UsergridClient = function() {
var self = this

self.isSharedInstance = false

var args = Array.prototype.slice.call(arguments)
console.log('child', args)
var options = _.isPlainObject(args[0]) ? args[0] : {}
if (args.length === 2) {
self.orgId = args[0]
self.containerId = args[1]
}

_.defaults(self, options, helpers.config, defaultOptions)

return self
}

使用this suggestion ,看起来我应该能够做到:

var client = Function.prototype.bind.apply(SDKClient, args)
_.assign(self, client)
Object.setPrototypeOf(self, new client())

但由于某种原因,当我注销时,您会看到:

SDK.init('org', 'container')

// parent [ 'org', 'container' ]
// child [ 'container' ]

更奇怪的是,当我只传递一个参数时,child 会以空数组的形式注销。

这个解决方案有什么问题?如何正确地将完整的args数组传递给SDK客户端的单例初始化?我的猜测是 bind.apply() 调用中缺少(或额外)一些参数,但我不知道是什么。

最佳答案

您链接的帖子说的是

new Something(a, b, c)

相当于

new (Function.prototype.bind.apply(Something, [null, a, b, c]))

注意null!您仍然需要将函数绑定(bind)到某些东西 - 当该函数与new一起使用时,这些东西随后将被忽略,但仍然需要传递一些东西。

你应该使用

var args = [null];
args.push.apply(args, arguments);

关于javascript - 使用 Function.prototype.bind.apply(Obj, args) 将参数传递给对象,仅传递第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35877993/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com