我可以在对象中包装一个原语:

> p = Object(1);
< Number {[[PrimitiveValue]]: 1}

我可以在上面设置属性:
> p.prop = 2;
> p.prop
< 2

同时仍使用原始对象:
> p + 1
< 2

我想用原型(prototype)方法修饰此类原始包装对象。我知道我可以使用以下方法显式设置原型(prototype):
> Object.setPrototypeOf(p, { q : 3 });
< Number {prop: 2, q: 3, [[PrimitiveValue]]: 1}

有没有什么方法可以在原型(prototype)已经就位的情况下创建包装器对象,因此我不必在每个新创建的包装器上设置它(或污染Object原型(prototype))?也许通过创建一个ObjectWrapper,其工作方式如下:
> ObjectWrapper = ...???...
> ObjectWrapper.prototype = { q : 3 };
> [new] ObjectWrapper(1)

我想屈服
< Number {q:3, [[PrimitiveValue]]: 1}function

最佳答案

这对您有用吗?您创建一个ObjectWrapperCreator,它为您提供了可以调用的函数,例如:

function ObjectWrapperCreator(prototype) {

    var wrapper = function(param) {
        prototype.param = param;
        var obj = Object(param);
        Object.setPrototypeOf(obj, prototype);
        obj.valueOf = function() {
            return this.param;
        };
        return obj;
    };
    return wrapper;
}

Usage:
  var b = ObjectWrapperCreator({p: 1});
  var c = b(4);
  >> c + 1

关于javascript - 如何使用原型(prototype)创建原始包装对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27097176/

10-17 02:56