Вопрос о некотором диком синтаксисе javascript и его ограничениях - PullRequest
0 голосов
/ 08 августа 2009

Так что я хорошо знаю javascript, но я не уверен в этом.

Трудно объяснить, поэтому я просто покажу это:

var view = new View();

view.rating = 4.5;

Можно ли в любом случае вызывать view.rating как функцию, которая немного манипулирует DOM и устанавливает этот рейтинг на пять?

Итак, в представлении:

View.prototype = {

  rating : function() {
     $('div.stars').width(4.5);
  }

}

Я знаю, что есть обходные пути, использующие что-то отличное от "view.rating = 5". Меня это не интересует. Мне интересно, есть ли способ установить это, поддерживая view.rating = 5. Это скоро JS идет прямо из PHP, и я не хочу увязать PHP с анонимными функциями ... как view.rating = function () {...};

Спасибо! Мэтт Мюллер

Ответы [ 2 ]

4 голосов
/ 08 августа 2009

Нет. ( Редактировать : по крайней мере, не во всех реализациях обычных браузеров)

В Javascript нет ничего, что эквивалентно "перегрузке = оператора".

Редактировать

Я не уверен, ясно ли это вам. Если вы делаете rating функцией (либо с помощью прототипа, либо нет), вы должны назвать ее как view.rating(5), и она может обновить DOM (или сделать что-нибудь).

3 голосов
/ 08 августа 2009

Большинство реализаций JavaScript не поддерживают создание свойств getter / setter, поэтому он не будет очень полезен в сети. Однако есть некоторые реализации, которые делают. Вот пример в реализации Mozilla:

РЕДАКТИРОВАТЬ: Позвольте мне просто уточнить, что написание getter / setters является синтаксическим сахаром по сравнению с использованием свойства стиля getFoo () / setFoo (foo). Это в интересах разработчика. IMO, для веб-приложения (в первую очередь из-за отсутствия поддержки IE) оно пока не совсем реалистично. Хотя доля IE на рынке падает, в зависимости от вашей демографии в широко распространенном приложении, многие ваших посетителей на данный момент по-прежнему не будут поддерживать их.

Еще несколько интересных для вас ссылок:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...