Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 05.11.2013, 17:21
Аспирант
Отправить личное сообщение для okouser Посмотреть профиль Найти все сообщения от okouser
 
Регистрация: 05.11.2013
Сообщений: 10

Связь статических объектов с приватными переменными
empty

Последний раз редактировалось okouser, 03.06.2016 в 16:32.
Ответить с цитированием
  #2 (permalink)  
Старый 05.11.2013, 18:06
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Если честно я не совсем понимаю что вам надо, но может быть так:

function A(input)
{
 var _name;
 
 this.getName = function()
 {
  return _name;
 };
 
  this.setName = function(input)
 {
  _name = input;
 };
 
};

window.onload=function(){
  exemplareObject = new A();
  exemplareObject.setName('test');
  var testVaribele = exemplareObject.getName('test');
  alert("testVaribele :  " +  testVaribele);
  alert("_name : " + _name);
}


Я понял... речь о статических методах. Я правильно понимаю: вы пытаетесь создать что-то типо статического getter и setter?

Последний раз редактировалось Faab, 05.11.2013 в 18:16.
Ответить с цитированием
  #3 (permalink)  
Старый 05.11.2013, 18:41
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

В джаваскрипте нет приватных свойств. Используй символ подчеркивания для условности.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #4 (permalink)  
Старый 05.11.2013, 18:46
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от okouser
И почему как надо не работает все-таки такая конструкция
Потому что прототип - он один, общий. Это один объект. И ты при каждом вызове конструктора перетираешь его свойства.
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 05.11.2013, 18:48
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от okouser
Как это нет.
Ты не умеешь отличать свойства от локальных переменных? Думаю дальше не о чем говорить..
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #6 (permalink)  
Старый 05.11.2013, 18:59
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Во втором случае метод toString вызывается сразу, до его затирания (которое происходит при создании нового экземпляра)
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #7 (permalink)  
Старый 05.11.2013, 19:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,105

okouser,

function A(name)
{
 var _name = 'test';

 A.prototype.getName = function()
 {
  return _name + this._name;
 };

 A.prototype.setName = function(value)
 {
  this._name = value;
 };

 A.prototype.toString = function()
 {
  return this.getName();
 };

 this.setName(name);
};

A.A1 = new A("1");
A.A2 = new A("2");
A.A3 = new A("3");
alert(A.A1); // test1
alert(A.A2); // test2
alert(A.A3); // test3
A.A2.setName(12345)
alert(A.A2); // test12345
alert(A.A3); // test3
Ответить с цитированием
  #8 (permalink)  
Старый 05.11.2013, 19:14
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Это не архитектура а говнокод. С говнокодом помочь не могу..
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #9 (permalink)  
Старый 05.11.2013, 19:19
Профессор
Отправить личное сообщение для Faab Посмотреть профиль Найти все сообщения от Faab
 
Регистрация: 16.04.2012
Сообщений: 310

Я просто сейчас как раз читаю раздел ООП в JS: мне это тоже интересно.

Вы пишите про статические экземпляры класса, но мне это не о чём не говорит. Я знаю суть статического свойства класса и статического метода класса, но в чём суть статического экземпляра класса?


A.prototype.setName = function(value){
  _name = value;
};


Вот эту строчку я перевожу как: присвоить всем инстанциям этого объекта метод setName. Зачем его указыввать внутри объекта? Я так понял из теории, что внутри объекта вы просто объявляете метод.. А вот если после объявления объекта вам надо присвоить новый метод и метод должен принадлежать всем инстанциям этого объекта, то нужно образаться к свойству (или методу?) prototype
Ответить с цитированием
  #10 (permalink)  
Старый 05.11.2013, 19:31
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от okouser
Если такой умный и профессиональный, то нужно привести контрпример грамотной архитектуры.
Так ты сначала поясни что ты понимаешь под "статическим объектом". И вообще, опиши задачу внятно.
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
связь между переменными Faab Events/DOM/Window 4 08.10.2013 14:01
Селектор из двух объектов переменными gearique jQuery 4 13.06.2013 19:31