Javascript.RU

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

Ты не понял. Никто не говорит о том, что нужно отказаться от new и использовать Object.create - это, конечно, бред. Object.create надо использовать в функции inherits, ибо нам нужен чистый объект с [[Prototype]], равным прототипу наследуемого класса, без всякой хрени от конструктора.
Цитата:
Мы это могли бы делать и по старинке. {__proto__: example}
Динамическое изменение свойства [[Prototype]] объекта вызовет проблемы с производительностью, ибо это неожиданная неоптимизируемая операция.
Ответить с цитированием
  #42 (permalink)  
Старый 25.10.2014, 21:28
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от Erolast
Никто не говорит о том, что нужно отказаться от new и использовать Object.create
Я говорю. Это унылый быдлокод, который плодит лишние объекты в цепочки прототипов.
Ответить с цитированием
  #43 (permalink)  
Старый 25.10.2014, 21:33
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

Сообщение от Erolast Посмотреть сообщение
И не буду, пример неверен. Надо так:
function inherits(Child, Parent) {
  Child.prototype = Object.create(Parent.prototype);
  Child.prototype.constructor = Child;
}

function Interface(){};
function Class(){};

inherits(Class, Interface);

Interface.prototype.someValue = 1;
Class.prototype.someValue = 2;

alert((new Interface()).someValue);
alert((new Class()).someValue);
Кстати, а нельзя вместо объекта во 2-ом аргументе create, просто написать вот так:
Child.prototype.constructor = Child;
Ответить с цитированием
  #44 (permalink)  
Старый 25.10.2014, 23:03
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Сообщение от Sweet
который плодит лишние объекты в цепочки прототипов.
Ну ка покажи пример таких "лишних" объектов, а то возникает ощущение, что ты них*я не понимаешь о чем ты говоришь.
Ответить с цитированием
  #45 (permalink)  
Старый 25.10.2014, 23:05
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Сообщение от Sweet Посмотреть сообщение
Я говорю. Это унылый быдлокод, который плодит лишние объекты в цепочки прототипов.
Ты глупости говориь. Сомотри: если тебе нужно чтобы у ребёнка были свои методы помимо методов родителя - тебе так или иначе не обойтись без объекта эти методы хранящего, так? Так где же "лишние объекты"?
__________________
29375, 35
Ответить с цитированием
  #46 (permalink)  
Старый 25.10.2014, 23:13
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

Кстати, ничего страшного не будет, если я стандартному объекту добавлю метод, чтобы наследование получилось более изящным с точки зрения синтаксиса:
Object.prototype.extends = function(parent)
{
  this.prototype = Object.create(parent);
  this.prototype.constructor = this;
};

var Interface =
{
  fd : "default descriptor"
};

function Class1() {};
Class1.extends(Interface);

function Class2() {};
Class2.extends(Interface);

Class1.prototype.fd = "class1 descriptor";

var obj1 = new Class1();
var obj2 = new Class2();
//var obj = new Interface(); //ошибка, так как нельзя создать экземпляр виртуального класса

alert(obj1.fd);
alert(obj2.fd);

Последний раз редактировалось Voronar, 25.10.2014 в 23:21.
Ответить с цитированием
  #47 (permalink)  
Старый 25.10.2014, 23:24
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,589

Voronar, только не таким образом, ибо:
Object.prototype.extends = function(){ alert('extends') };
var newObj = {foo: 'bar'};
for(var key in newObj) alert(key);
это может поломать чужой код.

Надо примерно так:
Object.defineProperty(Object.prototype, 'extends', {
  value: function(){},
  enumerable: *!*false*/!*,
  writable: true,
  configurable: true
});
__________________
29375, 35

Последний раз редактировалось Aetae, 25.10.2014 в 23:26.
Ответить с цитированием
  #48 (permalink)  
Старый 25.10.2014, 23:44
Аспирант
Отправить личное сообщение для Voronar Посмотреть профиль Найти все сообщения от Voronar
 
Регистрация: 15.02.2013
Сообщений: 55

Aetae
Спасибо, и вправду классная вещь этот Object.defineProperty().
Ответить с цитированием
  #49 (permalink)  
Старый 25.10.2014, 23:53
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Сообщение от Aetae
это может поломать чужой код.
По-идее, эта мантра проповедуется сейчас массово, но проблема высосана из пальца.
Object.prototype.extends = function(){ alert('extends') };
var newObj = {foo: 'bar'};
for(var key in newObj) {if(!(newObj.hasOwnProperty(key))) break; alert(key)};

Тот кто итерирует, должен понимать, что и зачем он итерирует. А проблемы дебила шерифа не е*ут.
Ответить с цитированием
  #50 (permalink)  
Старый 25.10.2014, 23:57
Кандидат Javascript-наук
Посмотреть профиль Найти все сообщения от terminator-101
 
Регистрация: 14.10.2014
Сообщений: 117

Voronar,
Если нужна поддержка IE-8, забудь, если я не ошибаюсь, не поддерживает он эту хрень, недавно тема тут была.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить / удалить класс кликом fabrique Общие вопросы Javascript 4 03.09.2014 04:43
Изменить класс родительского элемента STyLe Общие вопросы Javascript 1 29.05.2014 20:21
Как удалить класс у соседних элементов housewm Events/DOM/Window 4 11.03.2014 13:29
Передал аяксом класс в <div>, но как отловить событите клик на этот класс ? saturn Элементы интерфейса 11 31.05.2012 10:30
Jquery немогу установить класс! shureg Общие вопросы Javascript 4 26.10.2010 14:37