由js函数自定义的本机方法
console.log = function myLog(args){...}
或使用Object.definePropery(...)
然后
'prototype' in console.log == true
是否有一种隐藏prototype
键的方式,使其更像本机功能?
如此
'prototype' in console.log == false
答案 0 :(得分:2)
您可以删除属性:
console.log = function myLog(args){…}; delete console.log.prototype;
或者,通过不使用函数表达式来创建最初没有.prototype
的函数:
console.log = {log(args) {…}}.log;
console.log = (args) => {…};
答案 1 :(得分:-1)
GetOffMyLawn是正确的。对象原型被冻结
> Object
[Function: Object]
> Object.prototype
{}
> Object.prototype = null;
null
> Object.prototype
{}
就像功能一样
> Function instanceof Object
true
> Function.prototype
[Function]
> Function.prototype = null;
null
> Function.prototype
[Function]
为了重新分配原型,您需要实例化自己的Object。我认为默认情况下,新对象将不具有任何冻结属性,包括原型。
> function Test() {}
undefined
> const test = new Test();
undefined
> test
Test {}
> test.prototype
undefined
> test.prototype = null
null
> test instanceof Function
false
> test instanceof Object
true
> test instanceof Test
true
> test.prototype
null
> Object.prototype = test.prototype
null
> Object.prototype
{}
> Object.prototype.whoo = 'whoo';
'whoo'
> Object.prototype
{ whoo: 'whoo' }
> test.prototype = Object.prototype
{ whoo: 'whoo' }
> test.prototype
{ whoo: 'whoo' }
根据设计,Object.prototype不可写,不可枚举或不可配置(冻结)。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/prototype