【发布时间】:2011-10-31 03:36:42
【问题描述】:
有人可以指导我如何为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”。
可以在DefineOwnProperty下找到引发错误的JS引擎代码:
http://code.google.com/p/v8/source/browse/branches/bleeding_edge/src/v8natives.js?r=8073
【问题讨论】:
-
您是否尝试过实际更改字符串的长度? :P。在更严肃的语气中,你到底为什么要那样?!
-
是的,我不认为这是你真正想做的事情
-
是的,我确实修改了原型、defineSetter 和 defineProperties。我想知道我可以在当前浏览器中将本机“对象”推送多远。这允许在 javascript 上更轻松地实现编程语言
标签: javascript string object constructor