javascript-如何覆盖String的length属性

有人可以指导我如何设置自己的字符串长度,例如“ string” .length或String(“ string”).length.

Afaik,String是Object的后代,长度分配可能发生在prototype.constructor以及原型中.__defineSetter__;

编辑:
这样做的动机是要了解当前浏览器中的javascript可以推送多远,以便在其中实现自己的语言.运算符重载是我的第二大关注点,它似乎被有意阻止了(即没有参数传递给运算符).

一些动力来自:

http://code.google.com/p/traceur-compiler/

更新:
除新对象外,还可以使用以下方法锁定:
Object.preventExtensions(String.prototype);

Object.seal(obj)…不允许配置

Object.freeze(obj)…另外不允许编写

看到这里:http://msdn.microsoft.com/en-us/library/ff806191(v=vs.94).aspx#Y240

我想可能有一些方法可以撤销此锁定状态.

重新定义可以这样进行:

 Object.defineProperty(String, "length", {
        value: 101,
        writable: true,
        enumerable: true,
        configurable: true
    });

但是,在Chrome V8中会抛出“ redefine_disallowed”.

可以在DefineOwnProperty下找到引发错误的JS引擎代码:

http://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/v8natives.js?r=8073

解决方法:

那是不可能的.从理论上讲,这可以做到:

Object.defineProperties(String.prototype, {
    length: {
        get: function(){ return 1; }
    }
});

但是在Chrome上失败,并显示错误redefine_disallowed.

老实说,我认为您的方案有更好的解决方案.

上一篇:SpringMVC项目中中文字符乱码问题及解决办法总结(非专业最优解决办法) -- ajax传值乱码; request.getParameter()乱码;


下一篇:java-如何从不完整的类名获取实例对象?