有沒有什麼方法
可以修改目前字串的 proto 而不會去修改到 String.prototype.split
class UString extends String
{
split()
{
console.log('UString:split');
return ['UString:split'];
}
}
const STR = '♥️?典そこで彼らは\'",オリーブ山と呼ばれる山からエルサレムに帰った。';
{
let str = STR.toString();
// 原始
console.log(1, str.split());
}
{
let str = STR.toString();
// 此段代碼 = 無效
str.__proto__ = Object.assign({}, {
split: UString.prototype.split,
});
console.log(2, str.split());
}
{
let str = STR.toString();
// 此段代碼 = 無效
str.__proto__ = UString.prototype;
console.log(3, str.split());
}
{
let str = STR.toString();
// @FIXME 雖然成功了 但是請看下一段
str.__proto__.split = UString.prototype.split;
console.log(4, str.split());
}
{
let str = STR.toString();
// @BUG 這裡會出錯 因為修改 str.__proto__ 等於修改 String
console.log(5, str.split());
}
字串作为基本类型没有
__proto__
。每次想用它的属性的时候,都会现生成一个全新的String
的对象。所以,
'str'.__proto__ = {}
是没有用的,因为下次再用'str'.__proto__
的时候,又是一个全新的String
对象。全新的
String
对象用的__proto__
一定是String.prototype
。