Сообщение от macdack
|
не правильно ли называть это не свойством строки а ее методом
то есть str.length это вызов метода, возвращающего длину, но не способного принять значение извне
|
это обычное свойство, у которого выставлено writable:false, enumerable:false,и configurable:false. и прикручен геттер.
var a = Object.getOwnPropertyDescriptor(new String("FOO"), "length");
var b,c = ""; for(b in a) c += b+"="+a[b]+"\n";
alert(c);
можно запилить такое же самому :
var a = {};
a["0"] = "ноль";
a["1"] = "один";
a["2"] = "два";
Object.defineProperty(a, "length", {
enumerable: false,
configurable: false,
writeable: false,
get: function(){
for(var i = 0; i in this; i += 1) ;
return i;
}
});
alert( a.length );
// заимствуем метод у массива. у нас же ARRAY-LIKE объект
Array.prototype.push.call( a, "три" );
alert( "length: "+a.length+"\n a[3] = "+a[3] );