Как различить методы и свойства?
Друзья! Как вы их различаете? Синтаксис ведь один! Вот например:
window.close это метод window.location это свойство ДОлжны быть какие-то тонкости, скрытые от глаз начинающих. Очень странно. А ещё моё непонимание тем усугубляется, что захожу по этой ссылке http://javascript.ru/window.location и вижу, что location это объект. Короче, у меня голова кругом идёт. Я сюда пришёл с С, там как-то попроще было. (Был класс, были переменные типа <имя класса> и к этим переменным применялись функции, в классе определённые- суть методы. НУ и потом детали всякие. Может, и громоздче, но однозначно, то есть функция суть таковая и ничего более, а тут location и объект и свойство... бр...) ПОмогите пожалуйста разобраться. Спасибо. |
А что странного в том, что свойство может быть ссылкой на объект? Кроме свойств и методов есть еще сеттеры и геттеры :)
|
Мне знаете, ли не до шуток. Я и так Вам верю, что Вы много знаете, могли бы не писать ерудны, не тратит своё и моё время, если по какой-то причине не хотите помочь. Извините.
|
В JavaScript у объекта только свойства и могут быть (если не считать сеттеров и геттеров), а метод — это просто ссылка на объект, который является функцией :)
Ну проверить тип, можно, например, так: var obj = { property1: true, property2: { otherObjectProperty: 100, }, property3: function () { return; } }; alert([ "obj.property1 is " + typeof obj.property1, "obj.property2 is " + typeof obj.property2, "obj.property3 is " + typeof obj.property3 ].join("\n")); Цитата:
Цитата:
|
А различаете вы их как?
Ну с windows, думаю всё понятно. Тут все свойства и методы от зубов отскакивать должны. Но, наверное, есть же какие-то малоизвестные свойства и методы? Ну и потом могут новые прибавляться разработчиками. Или надо все запоминать? С типами понятно, спасибо. Но вот тот же join, допустим. Я ткнул в справочник, посмотрел, для чего он нужен. Но вот что он такое- метод или свойство так и не понял, а в справочнике не написано. Ну раз он имеет аргументы, наверное метод. Неохота гадать, показывать невежество. Должно быть какое-то различие в синтаксисе, да ведь? Скобки () присутствуют не всегда. |
Зачем какие-то различия в синтаксисе, если у объекта могут быть только свойства? Методом, называют свойство объекта, являющееся ссылкой на функцию, потому что так привычнее, такая терминология используется в других языках, но от этого какой-то другой конструкцией в JavaScript оно не становится.
var obj = {}; obj.abc = function () {}; // здесь obj.abc — метод obj.abc = 1; // а тут уже obj.abc — свойствоКакое может быть различие в доступе к свойствам при условии, что это свойство может быть динамически изменено? |
Попробую разобраться, спасибо.
|
Еще есть сеттеры и геттеры, но механизм их создания доступен JS-программисту не во всех браузерах:
var obj = { x: 1 }; obj.__defineSetter__("propertyX", function (a) { this.x = a; }); obj.__defineGetter__("propertyX", function () { return this.x + 1; }); obj.propertyX = 2; alert(obj.x); alert(obj.propertyX); Так же, возможно, реализованы и window.location, и document.body.innerHTML. Хотя, сами эти сеттеры и геттеры, наверное, тоже свойства, но с определенной пометкой и обработчиками, тут я не знаю, как оно внутри работает, могу только догадываться. |
А что такое свойство?
Длина это свойство, ширина свойство, цвет тоже свойство. А вот это что? var obj = {}; obj.abc = 1; // а тут уже obj.abc — свойство Ну то есть я увидел создание объекта obj (Какого типа? Или это напрасный вопрос- следствие языка С?) Но вот дальше вообще не понимаю ничё. Как может единица быть свойством? Чё-то вообще не пойму. Ну а потом отсюда вот взял http://www.spravkaweb.ru/javascript/...operty#anchors var anchorCount=document.anchors.length Как прочесть? ЕСть объект document, который обладает свойством anchors, которое В СВОЮ ОЧЕРЕДЬ также обладает свойством lenght? ПОлучается, у свойства есть свойство? |
Цитата:
Цитата:
abc — свойство объекта obj 1 — значение свойства abc Значением свойства может быть не только примитив (число, строка и т.д.), но и ссылка (Reference) на другой объект, функцию, массив. Цитата:
Читайте статьи на этом сайте или для глубокого понимания Тонкости ECMAScript. Дальше теорию рассказывать не охото. |
Цитата:
Цитата:
Цитата:
ЗЫ: Постоянно слышу от Java-программистов, мол как вы в этом JS разбираетесь? Непонятно что откуда приходит и куда уходит:D В принципе, может быть и так, что Java Script-код после выполнения сам себя удалит и концов потом вообще не найти:D |
Ну да. Вот написано "Переход от процедурного к объектно-ориетированному программированию может быть самым трудным моментом в обучении"
JavaScript. Библия пользователя, Гудман, Моррисон. буду её штутдировать. Спасибо всем. Если не продвинусь сам, спрашивать ничё не буду, а заброшу это дело. |
Цитата:
|
Цитата:
|
Цитата:
|
Цитата:
Цитата:
1 -- число. "a" -- строка. [] -- объект с прототипом Array. Что абстрактного? |
Wikipedia:
Цитата:
Цитата:
Я про то, что задачи у них совершенно разные. |
1 -- число. Может приводиться к объекту, типа Number.
"a" -- строка. Может приводиться к объекту, типа String. [] -- объект с прототипом Array. Уже объект, со своим интерфейсом. {} -- Ещё один объект, но с другим интерфейсом. И т.д... Так кто же из них настоящий объект? |
Епт, вот я туплю. Тип объекта с объектом перепутал:D
Нада кароче в отпуск срочно:) |
Цитата:
Цитата:
|
Цитата:
|
Он правильно работает.
|
Цитата:
typeof new Array == object Это правильно?! Я уже молчу про typeof null. |
Цитата:
[] instanceof Object |
В JS нет типа Array, есть встроенный объект Array.
|
Цитата:
|
|
А new Number это же объект?!
|
Цитата:
|
Цитата:
|
Ну, кому как :)
|
> В JS нет типа Array, есть встроенный объект Array.
new function(){ function f(){} f.apply(null,[1]) f.apply(null,arguments) f.apply(null,{'0':1}) // внимательно читаем сообщение об ошибке }( 1 ) |
Цитата:
внимательно читаем список типов |
то, что ты ссылаешься на другой язык
|
Цитата:
|
А я только когда начинал разбираться больше всего этому удивлялся:
var x = new Boolean(false); if (x) alert('Ура !!!'); :D |
Цитата:
|
Так о каком языке говоришь ты? И где есть спецификация этого языка?
|
вот, специально для тебя нашёл определение типа array
http://hg.mozilla.org/tracemonkey/fi...rray.cpp#l1269 |
а вот для типа object: http://hg.mozilla.org/tracemonkey/fi...jsobj.cpp#l120
|
Часовой пояс GMT +3, время: 22:50. |