首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用prototype创建原语包装器对象

如何用prototype创建原语包装器对象
EN

Stack Overflow用户
提问于 2014-11-24 10:54:11
回答 2查看 243关注 0票数 3

我可以将一个基元包装在一个对象中:

代码语言:javascript
复制
> p = Object(1);
< Number {[[PrimitiveValue]]: 1}

这让我可以设置它的属性:

代码语言:javascript
复制
> p.prop = 2;
> p.prop
< 2

同时仍然使用基本对象:

代码语言:javascript
复制
> p + 1
< 2

我想用prototype方法装饰这样的原始包装对象。我知道我可以使用以下命令显式设置原型:

代码语言:javascript
复制
> Object.setPrototypeOf(p, { q : 3 });
< Number {prop: 2, q: 3, [[PrimitiveValue]]: 1}

有没有办法在原型已经就位的情况下创建包装器对象,这样我就不必在每个新创建的包装器上都设置它(或者污染Object原型)?也许可以通过创建一个ObjectWrapper来实现,其工作方式如下:

代码语言:javascript
复制
> ObjectWrapper = ...???...
> ObjectWrapper.prototype = { q : 3 };
> [new] ObjectWrapper(1)

我想要给你

代码语言:javascript
复制
< Number {q:3, [[PrimitiveValue]]: 1}function
EN

回答 2

Stack Overflow用户

发布于 2014-11-24 11:39:28

你可以使用这个结构..。

代码语言:javascript
复制
//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
票数 0
EN

Stack Overflow用户

发布于 2014-11-24 14:10:57

这对你有效吗?您可以创建一个ObjectWrapperCreator,它将返回一个函数,然后可以调用该函数,如下所示:

代码语言:javascript
复制
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 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27097176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档