Javascript 如何使用prototype创建基本包装器对象

Javascript 如何使用prototype创建基本包装器对象,javascript,object,prototype,Javascript,Object,Prototype,我可以将基本体包装到对象中: > p = Object(1); < Number {[[PrimitiveValue]]: 1} 我想放弃 < Number {q:3, [[PrimitiveValue]]: 1}function

我可以将基本体包装到对象中:

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

< Number {q:3, [[PrimitiveValue]]: 1}function
您可以使用此结构

//outer function is to provide support for multiple wrappers with different inheritance
function PrimitiveWrapper(){
        return function(x){
            this.valueOf = function(){
                return x;
            }
        };
    };

var wrapper1 = PrimitiveWrapper();
wrapper1.prototype.p = 3;
var w11 = new wrapper1(1);
var w12 = new wrapper1(2);

var wrapper2 = PrimitiveWrapper();
var w21 = new wrapper2(1);

console.log(w11+3); //4
console.log(w11.p); //3
console.log(w12+3); //5
console.log(w12.p); //3

console.log(w21+3); //4
console.log(w21.p); //undefined

这对你有用吗?您可以创建一个
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 

如果您不想让任何人在将param属性添加到原型后立即处理它,那么可以使其不可变。
> ObjectWrapper = ...???...
> ObjectWrapper.prototype = { q : 3 };
> [new] ObjectWrapper(1)
< Number {q:3, [[PrimitiveValue]]: 1}function
//outer function is to provide support for multiple wrappers with different inheritance
function PrimitiveWrapper(){
        return function(x){
            this.valueOf = function(){
                return x;
            }
        };
    };

var wrapper1 = PrimitiveWrapper();
wrapper1.prototype.p = 3;
var w11 = new wrapper1(1);
var w12 = new wrapper1(2);

var wrapper2 = PrimitiveWrapper();
var w21 = new wrapper2(1);

console.log(w11+3); //4
console.log(w11.p); //3
console.log(w12+3); //5
console.log(w12.p); //3

console.log(w21+3); //4
console.log(w21.p); //undefined
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