Показать сообщение отдельно
  #18 (permalink)  
Старый 19.04.2012, 22:35
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от 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]  );

Последний раз редактировалось melky, 19.04.2012 в 22:43.
Ответить с цитированием