有人可以指导我如何设置自己的字符串长度,例如“ 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.
老实说,我认为您的方案有更好的解决方案.