Может ли кто-нибудь подсказать мне, как установить мою собственную длину для String
, как в "string".length
или String("string").length
.
Afaik, String
является потомком от Object
, идлина присваивается, вероятно, в prototype.constructor
, а также в prototype.__defineSetter__;
Edit: Мотивация состоит в том, чтобы узнать, насколько далеко можно нажать 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