Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 12.12.2014, 16:21
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

tsigel,
Там ясно, что у тебя extend конфликтует с чем-то. Скопируй код, смени имя и выполни локально. Можешь в ноде выполнить.
Ответить с цитированием
  #12 (permalink)  
Старый 12.12.2014, 16:23
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

krutoy,
Это просто вполне очевидный пример того что не стоит трогать базовые прототипы
Ответить с цитированием
  #13 (permalink)  
Старый 12.12.2014, 16:24
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

tsigel,
///////////////////////////////////////////////////////////////////////
//prepare:
 
Object.defineProperty(Object.prototype, "extend111", {
 value: function(src){
   for(var i in src){this[i]=src[i]}
 },
 enumerable: false
})
 
 
Nigger=function(){} // левый класс
Nigger.prototype.color="black"
 
/////////////////////////////////////////////////////////////////////////
//implementation:
 
Class=function(classProperties, opt){
   var f=function(init){
      if(opt) if(opt.object) this.extend111(opt.object)
      this.extend111(init)
   }
   if(opt) if(opt.parent) {
                             f.prototype=Object.create(opt.parent.prototype)
                             f.prototype.constructor=f
                          }
   f.prototype.extend111(classProperties)
   return f
}
 
 
//////////////////////////////////////////
//example
 
Person=new Class({legs: 2, hands: 2, head: 1}, {object: {a: 1}, parent: Nigger})
 
 
person1=new Person({name: "Jack"})
person2=new Person({name: "John"})
 
with(person1){console.log(color, hands, name)}
with(person2){console.log(color, hands, name)}
 
Person.prototype.footballFan=true // пусть экземпляры нашего класса person будут  футбольными болельщиками
Nigger.prototype.teeth="white" // пусть левый нигер теперь с белыми зубами
 
with(person1){console.log(color, hands, name, teeth, footballFan)}
with(person2){console.log(color, hands, name, teeth, footballFan)}
 
 
//  black 2 Jack
//  black 2 John
//  black 2 Jack white true
//  black 2 John white true

за тебя сделал, пробуй
Ответить с цитированием
  #14 (permalink)  
Старый 12.12.2014, 16:25
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

tsigel,
Вот как раз сраные яблочники и сделали это, мудаки. А мой пример для теста, это ж не либа.
Ответить с цитированием
  #15 (permalink)  
Старый 12.12.2014, 16:30
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от tsigel
базовые прототипы
там это вообще не принципиально, можно в экстенд кидать объект явным аргументом, это на суть не повлияет, просто сахарней и удобней. А расширять надо, язык под это заточен, только с умом.
Ответить с цитированием
  #16 (permalink)  
Старый 12.12.2014, 17:49
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Крутой, если я правильно понял твою задачу, то это уже реализовано в ES6:
class Man prototype Human.prototype <| {
  size: 6,
  weight: 80
} {
  fart() {

  }
}

Последний раз редактировалось Erolast, 12.12.2014 в 17:52.
Ответить с цитированием
  #17 (permalink)  
Старый 12.12.2014, 17:53
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Сообщение от Erolast
это уже реализовано в ES6:
Возможно, я его не знаю, ничего сказать не могу.
Допустим
man1=new Man
Human.prortotype.foo="bar"
man1.foo -- ???

что покажет последняя строка?

Последний раз редактировалось krutoy, 12.12.2014 в 17:57.
Ответить с цитированием
  #18 (permalink)  
Старый 12.12.2014, 18:10
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

"bar". Там выйдет такая цепочка прототипов:
var man = new Man();
console.log(man.__proto__); // {size: 6, weight: 80}
console.log(man.__proto__.__proto__ == Human.prototype); // true

(Да, я знаю, что __proto__ устарел, просто для краткости).
Ответить с цитированием
  #19 (permalink)  
Старый 12.12.2014, 18:12
Профессор
Посмотреть профиль Найти все сообщения от krutoy
 
Регистрация: 09.11.2014
Сообщений: 610

Erolast,
Ну да, это, похоже, почти то же самое.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Протокол File krasovsky Javascript под браузер 5 23.02.2013 11:54
https протокол float Серверные языки и технологии 13 01.09.2011 18:02
Протокол http AndreyT Учебные материалы 3 10.07.2011 13:16
Протокол date: (передача переноса строки) BIOHAZARD Общие вопросы Javascript 2 01.10.2009 07:31
AJAX запрос на другой протокол Veresc AJAX и COMET 2 18.09.2009 18:47