有人可以指导我如何为String
设置自己的长度,例如"string".length
或String("string").length
。
Afaik,String
是来自Object
的后代,长度分配可能发生在prototype.constructor
以及prototype.__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”。
抛出错误的JS引擎代码可以在DefineOwnProperty:
下找到http://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/v8natives.js?r=8073
答案 0 :(得分:3)
这不太可能。从理论上讲,这可以胜任:
Object.defineProperties(String.prototype, {
length: {
get: function(){ return 1; }
}
});
但在Chrome上,它失败并显示错误redefine_disallowed
。
老实说,我认为你的方案有更好的解决方案。