gpt4 book ai didi

javascript - 在不修改原型(prototype)的情况下扩展核心类型

转载 作者:行者123 更新时间:2023-12-03 08:19:31 25 4
gpt4 key购买 nike

如何在不修改原型(prototype)的情况下扩展核心 JavaScript 类型(字符串、日期等)?例如,假设我想用一些方便的方法创建一个派生字符串类:

function MyString() { }
MyString.prototype = new String();
MyString.prototype.reverse = function() {
return this.split('').reverse().join('');
};
var s = new MyString("Foobar"); // Hmm, where do we use the argument?
s.reverse();
// Chrome - TypeError: String.prototype.toString is not generic
// Firefox - TypeError: String.prototype.toString called on incompatible Object

该错误似乎源于 String 基本方法,在这种情况下可能是“拆分”,因为它的方法正在应用于某些非字符串对象。但是如果我们不能将 应用于非字符串对象,那么我们真的可以自动重用它们吗?

[编辑]

显然我的尝试在很多方面都存在缺陷,但我认为这表明了我的意图。经过一番思考,我们似乎无法重用任何 String 原型(prototype)对象的函数,除非在 String 上显式调用它们。

是否可以这样扩展核心类型?

最佳答案

2 年后:在全局范围内改变任何东西是一个糟糕的主意

原文:

在 ES5 浏览器中扩展原生原型(prototype)存在一些“错误”是 FUD。

Object.defineProperty(String.prototype, "my_method", {
value: function _my_method() { ... },
configurable: true,
enumerable: false,
writeable: true
});

但是,如果您必须支持 ES3 浏览器,那么使用 for ... in 的人就会遇到问题。在字符串上循环。

我的观点是你可以改变原生原型(prototype)并且应该停止使用任何写得不好的代码

关于javascript - 在不修改原型(prototype)的情况下扩展核心类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7141734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com