String.prototype = {};
String.prototype; //returns original value, i.e hasn't changed
function my_func(){};
my_func.prototype = {};
my_func.prototype; // returns {}, i.e has changed.
为什么String.prototype没有更改?
答案 0 :(得分:3)
您无法更改它,因为spec的prototype
的{{1}}属性是不可写的且不可配置的,它指出:
String.prototype
String.prototype的初始值为固有对象%StringPrototype%。此属性具有属性{[[[Writable]]:false,[[Enumerable]]:false,[[Configurable]]:false)
您自己对象的原型 是可写的,您可以在String
中看到:
Object.getOwnPropertyDescriptor()
可写的意思是:
可写
当且仅当与该属性关联的值可以更改时才为true(仅数据描述符)。
您也无法将其设置为可写状态,因为它是不可配置的:
可配置
当且仅当此属性描述符的类型可以更改并且该属性可以从相应对象中删除时,才为true。
发件人:MDN
这并不意味着您不能更改原型对象,只是不能删除它或用其他东西代替它。例如,您可以添加到其中(不是我推荐这样做):
// String
console.log("String",
Object.getOwnPropertyDescriptor(String, 'prototype'))
// Custom Object
function my_func(){};
console.log("Your own object",
Object.getOwnPropertyDescriptor(my_func, 'prototype'))