|
Понимание ООП в JavaScript
Чей-то почитал тут и там статьи и разное и запутался совсем . Что же такое ООП в JavaScript ...
Хотелось бы в этой теме провентилировать разные конкретные вопросы. Первый вопрос , чтобы зацепиться, такой : Если Array является объектом (встроенным) со свойствами constructor,length,prototype,concat,join etc..., то почему же я получаю эти свойства у его прототипа, а не у него самого : alert(Array.prototype.hasOwnProperty("join") ) // true alert(Array.hasOwnProperty("join")) // false? Тем более, что сказано в документации : Этот метод не проверяет наличие свойства по цепочке прототипов; указанным свойством должен обладать именно сам объект. А пример выше показывает, что именно сам объект Array не обладает свойством, а обладает, наоборот, - прототип Array.prototype . Короче , путаница получается - распутайте, плз. Кстати, и в этом контексте также непонятно, почему : var a = new Array(); alert(a.hasOwnProperty("join")) // false PS Вот еще непонятные в связи с этим вопросом вещи : var a = new Array(1,2); alert(a.join(";")+"= a.join(';') Работает"); alert(a.hasOwnProperty("join")+"=a.hasOwnProperty('join') У собств НЕТ") // false alert(Array.hasOwnProperty("join")+"=Array.hasOwnProperty('join') У Array НЕТ") // false alert(Array.prototype.hasOwnProperty("join")+"=Array.prototype.hasOwnProperty('join') У Array.prototype ЕСТЬ") // true alert(Array.prototype.isPrototypeOf(a)+"=Array.prototype.isPrototypeOf(a)"); // true alert(Array.isPrototypeOf(a)+"=Array.isPrototypeOf(a)"); // false alert() alert(Array.prototype.isPrototypeOf(Array)+"=Array.prototype.isPrototypeOf(Array)"); // false alert(Array.isPrototypeOf(Array)+"=Array.isPrototypeOf(Array)"); // true alert() alert(Object.prototype.isPrototypeOf(Array)+"=Object.prototype.isPrototypeOf(Array)"); // true alert(Object.isPrototypeOf(Array)+"=Object.isPrototypeOf(Array)"); // false alert() alert(Object.prototype.hasOwnProperty("constructor")+"=Object.prototype.hasOwnProperty('constructor')") // true alert(Function.hasOwnProperty("constructor")+"=Function.hasOwnProperty('constructor')") // false PPS. Может вообще кто-нибудь человеческим неформальным языком объяснить, что такое прототип, экземпляр объекта(или класса, не знаю , как правильно), объект(класс, не знаю , как в javascript надо говорить) ? |
на всякий случай.читали вы это?особенно вторую статью.
там по моему вполне качественно объясняется. если читали,и не поняли суть, то я даже не знаю как вам объяснить по другому |
Цитата:
|
дда хрен его знает, откровенно говоря.
не настолько я глубоко это знаю, как оказывается. как говорится воспринимайте образами и звуками. вот примерно так я и воспиринимаю.пожтому словами объяснить определения человеческим языком не могу. советую еще почитать оригинальную документацию, можеть она прояснит ва ситуацию. замечу что ваши тесты немного по разному работают в разных браузерах(вы тестировали, подозреваю в опере.в мозиле некоторые рузльтаты отличаются), и связано это с разной реализацией базовых типов.вот со своими объектами, думаю все будет одинаково в обоих браузерах |
Цитата:
|
Цитата:
Цитата:
|
Или вот такой совсем простой вопрос - что заносится, если заносится вообще, в свойство нового объекта prototype при его создании (т.е. (New {}).prototype чему равно и какого типа ) ?
|
kefi,
Прототип может быть только у конструктора (функции). Прототип это ссылка на объект, в котором будет производится поиск свойств, если они не были найдены в объекте, сформированным конструктором. С помощью прототипов в JavaScript реализуется наследование. Возможно вам что-то разъяснит следующий код: // Объявляем конструктор var constr = function() { // Объявляем свойство объекта this.a = 1; } // Объявляем свойство прототипа constr.prototype.b = 2; // Создаем объект конструктора var obj = new constr(); alert([obj.hasOwnProperty("a"), obj.a]); // true, 1 alert([obj.hasOwnProperty("b"), obj.b]); // false, 2 Свойства b в "собственных" свойствах объекта не было, но он был найден в прототипе. Вообще, рекомендую почитать статью о наследовании, я уверен, она ответит на ваши вопросы, касательно прототипов. |
|
2 Zeroglif > спасибо за ссылки, прочту, пока с пустой головой так быстро я не погружусь.
А пока : Цитата:
|
Часовой пояс GMT +3, время: 19:47. |
|