gpt4 book ai didi

javascript - 继承javascript Number以更改为String

转载 作者:搜寻专家 更新时间:2023-11-01 00:32:55 24 4
gpt4 key购买 nike

我正在尝试继承 Number 以覆盖 toString 方法以在调用 toString 时输出固定小数点:

function FixedNumber(value) {
Number.call(this, value);
}

util.inherits(FixedNumber, Number);

FixedNumber.prototype.toString = function() {
return this.toFixed(3);
}

var n = new FixedNumber(5);
var s = n.toString();

不幸的是,这不起作用。我得到以下异常:

TypeError: Number.prototype.valueOf is not generic
at FixedNumber.valueOf (native)
at FixedNumber.toFixed (native)
at FixedNumber.toString (repl:2:13)
at repl:1:3
at REPLServer.self.eval (repl.js:110:21)
at repl.js:249:20
at REPLServer.self.eval (repl.js:122:7)
at Interface.<anonymous> (repl.js:239:12)
at Interface.EventEmitter.emit (events.js:95:17)
at Interface._onLine (readline.js:202:10)

我做错了什么,我该如何做我想做的事?

最佳答案

Number 作为一个函数被调用时(当你对它使用 call 时会发生什么),它不像一个“普通的”构造函数——相反,它只是将参数转换为数字。

15.7.1.1 Number ( [ value ] )

Returns a Number value (not a Number object) computed by ToNumber(value) if value was supplied, else returns +0.

除此之外,它什么都不做。您实质上返回的是一个普通对象,其原型(prototype)基于 Number.prototype —— 未设置存储实际数字的内部属性。

由于返回的对象不是 Number 对象,它会失败,因为 Number.prototype.toString 不是通用的,这意味着它只能用于实际的 Number 对象或基元。即使它没有抛出错误,它也可能会返回 "NaN",因为如果未设置,这是默认设置。

目前确实没有“干净”的方法可以做到这一点,尽管这在 ES6 中可以通过子类化 native 构造函数来实现。

虽然这有点乱七八糟,但您可以这样做:

function FixedNumber(num) {
this.toString = function () {
return num.toFixed(3);
};

// implement the rest of Number.prototype as instance methods
}

// make instanceof return true
FixedNumber.prototype = Object.create(Number.prototype);

将这些方法放在原型(prototype)上并不可行,因为无法访问实际存储的数字。

关于javascript - 继承javascript Number以更改为String,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22170647/

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