Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 24.06.2013, 14:11
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Как заменить прототип в созданном объекте?
Дело в том, что свойства объекта трогать нельзя, т.е. нельзя создать объект с нужным прототипом и скопировать в него свойства исходного. Нужно в исходном объекте заменить один прототип на другой. Как это сделать?

Obj.prototype = newProtoObj

не работает
Ответить с цитированием
  #2 (permalink)  
Старый 24.06.2013, 14:39
Профессор
Отправить личное сообщение для Shitbox2 Посмотреть профиль Найти все сообщения от Shitbox2
 
Регистрация: 04.10.2010
Сообщений: 571

Но __proto__ не везде доступна, поэтому не хочу через нее.
А дело в том, что сторонний плагин поставляет объекты со своим прототипом. Мне же нужно дополнять ими собственные объекты, причем ссылки на них не должны меняться. Делать свои объекты сразу из нужного прототипа не могу, потому что у плагина нет такой функции получить пустой объект или прототип. Можно, конечно, скопировать свойства прототипа прямо в объект, что, в общем, устраивает, но как-то не слишком это красиво... Вот такая делема)
Ответить с цитированием
  #3 (permalink)  
Старый 24.06.2013, 15:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Нет другого способа. Кстати либа Zepto именно поэтому не работает в IE.
Там коллекция представляет из себя массив с подмененным прототипом (как раз через __proto__ )

Кстати, возможно ли преобразовать массив в простой объект без итерирования?
То есть
//имеем массив:
var array = ["a", "b"]
//имеем пустой объект:
var object = {length:0}
/* какая-то магия ... главное без итераций */
// получаем объект:
object // {0: "a", 1: "b", length: 2}, length можно присвоить вручную
Ответить с цитированием
  #4 (permalink)  
Старый 24.06.2013, 16:01
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от danik.js
Кстати, возможно ли преобразовать массив в простой объект без итерирования?
var array = ["a", "b"];
alert(Object.prototype.toString.call(array));

var object = Object.create(array);
alert(Object.prototype.toString.call(object));

alert(object.length);
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 24.06.2013, 17:01
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Не не. Нафига в прототип то засунул? Тем более прототипом будет иной объект (набор функций). Задача совершенно другая.
Ответить с цитированием
  #6 (permalink)  
Старый 24.06.2013, 21:38
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Сообщение от Shitbox2
Как заменить прототип в созданном объекте?
Сообщение от Shitbox2
Можно, конечно, скопировать свойства прототипа прямо в объект, что, в общем, устраивает, но как-то не слишком это красиво...
копируй в один объект (или прототип функции) и на его (ее) основе создавай другие

var creator = {}; // объект в кот. скопировали

// или

function foo() {}
foo.prototype = {}; // объект в кот. скопировали
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как проверить наличие элементов в объекте? гвоздик Общие вопросы Javascript 4 30.10.2009 11:33
Как узнать сколько членов в объекте kdie Общие вопросы Javascript 2 30.09.2009 12:28
DOM vs iframe. Как в ифрейме заменить выделенный текст (его innerHTML)? Бухалыч Events/DOM/Window 4 20.08.2009 14:30
Как правильно послать XML в POST запросе LowCoder AJAX и COMET 10 15.07.2009 23:20
Как заменить эл-ты одного списка эл-тами другого ? Mayar Элементы интерфейса 5 28.04.2009 11:21