Mar*_* An 17 javascript prototype xmlhttprequest prototypal-inheritance ecmascript-6
var obj = new XMLHttpRequest();
console.log("Object.keys():",Object.keys(obj));
console.log("Object.getOwnPropertyNames():",Object.getOwnPropertyNames(obj))
console.log("Object.entries():",Object.entries(obj))
console.log("JSON.stringify():",JSON.stringify(obj))
console.log("console.log:"); console.log(obj)
Run Code Online (Sandbox Code Playgroud)
输出:
Object.keys(): []
Object.getOwnPropertyNames(): []
Object.entries(): []
JSON.stringify(): {}
console.log:
XMLHttpRequest {onreadystatechange: null, readyState: 0, timeout: 0, withCredentials: false, 上传: XMLHttpRequestUpload, ...}
如何在 javascript 中创建这样一个对象,其属性仅使用 打印console.log(obj),但不由上述任何函数返回?
我已经尝试使用constructor function, object.create()(with enumerable:false), Object.assign(), using来创建对象,getters从类中初始化,从扩展类中初始化等
\n\n\n如何在 javascript 中创建这样一个对象,其属性仅使用 console.log(obj) 打印,但不会由上述任何函数返回?
\n
我发现的一种接近的解决方案是下面的解决方案。这将打印属性console.log(obj)。然而 obj 是一个代理。
在 Chrome 控制台上,结果与输出相同XMLHttpRequest(类为Proxy)。在 Firefox 控制台上,它是类的表示Proxy,因此它并不完全相同。
\n const obj = new Proxy({prop1:"value1", prop2: "value2"}, {ownKeys: _=>[]});\n\n console.log("Object.keys():",Object.keys(obj));\n console.log("Object.getOwnPropertyNames():",Object.getOwnPropertyNames(obj))\n console.log("Object.entries():",Object.entries(obj))\n console.log("JSON.stringify():",JSON.stringify(obj))\n console.log(obj)\n\nRun Code Online (Sandbox Code Playgroud)\n\n结果:
\n\n\n\n\nObject.keys(): []
\n
\n Object.getOwnPropertyNames(): []
\n Object.entries(): []
\n JSON.stringify(): {}
\n console.log:
\n Proxy\xc2\ xa0{prop1: "值1", prop2: "值2"}
并且console.log(obj.prop1) / obj.prop1="newValue"仍然有效。