【发布时间】:2019-01-05 14:31:07
【问题描述】:
我想了解如何指定和构建数组。
我正在将数组与额外的方法混合并尝试传入Array.isArray()。我可以通过instanceof 和Poly-filled isArray
var protoOfArray = Object.getPrototypeOf([])
var tools4Arrays = Object.defineProperty(
Object.create(protoOfArray),
'sum', {
'value': function sum() {
return this.reduce((a, b) => a + b, 0)
}
}
)
tools4Arrays[Symbol.toStringTag] = 'Array'
var fakeArray = Object.defineProperty(
Object.create(
tools4Arrays
),
'length', {
'value': 0,
'writable': true
}
)
console.log(`fakeArray instanceof Array: ${fakeArray instanceof Array}`)
console.log(`polyfill.isArray(fakeArray): ${Object.prototype.toString.call(fakeArray) === '[object Array]'}`)
console.log(`Array.isArray(fakeArray): ${Array.isArray(fakeArray)}`)
如果我使用:fakeArray = Object.setPrototypeOf([], tools4Arrays) 最后的日志也是真的。
还有什么可以分隔对象数组? 我可以嘲笑它吗?
【问题讨论】:
-
你的意思是还有什么可以将数组与对象分开?或者你是在问一些关于包含对象的数组的具体问题吗?
-
@joe:这与对象数组无关。我可以从对象构建数组编辑吗?什么转换需要在常规对象上构造一个数组?我的 fakeArray 不通过 Array.isArray()。我如何靠近?这种转变可能吗?还是数组不能从对象中约简?
标签: javascript arrays mocking