[英]How to create a JS object with the default prototype from an object without a prototype?
背景:模塊查詢字符串例如能夠將key=value&hello=universe
解析為對象{key: 'value', hello: 'universe'}
。 但是,模塊作者已決定返回的對象沒有原型。 換句話說,這個“混蛋”對象是由Object.create(null)
創建的。
問題:使用parsed.hasOwnProperty('hello')
會很方便,但如果沒有默認的對象原型,這是不可能的。 當然,人們可以使用Object.prototype.hasOwnProperty.call(parsed, 'hello')
但我認為我們都同意這樣的表達是在出生后立即殺死丑陋的。
問題:如何很好地將無原型對象轉換為默認對象原型和hasOwnProperty
等方法? 另外,這可以在不使用恐懼的 __proto__
或setPrototypeOf
嗎?
我不建議更改第三方軟件包的原型,它可能會被凍結並容易出現運行時錯誤。 我既可以使用內置in
操作者@Bergi建議或反映ES6 API。
const _ = console.info const parsed = ( { __proto__: null , foo: 'fu' , bar: 'bra' } ) _('foo' in parsed) // true _('fu' in parsed) // false /** ES6 (fully supported in current browsers) */ _(Reflect.has(parsed, 'foo')) // true _(Reflect.has(parsed, 'fu')) // false
我不能說我以前做過這個,但這是一種方法
let bastard = Object.create(null); bastard.father = 'vader'; let adopted = Object.assign({}, bastard); console.log(adopted.hasOwnProperty('father')); // => true
setPrototypeOf()
是沒有什么可擔心的,但沒有它你可能會做如下;
var o1 = Object.create(null), o2; o1.test = "42"; o2 = Object.assign({},o1); console.log(o2.test); console.log(o2.constructor.prototype);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.