Как добавить параметры / переключатели в Eclipse / Maven Run Configuration

Он делает 5 вещей:

  1. Создает новый объект. Тип этого объекта - это просто object .
  2. Он устанавливает свойство внутреннего, недоступного, нового объекта [[prototype]] (т.е. __proto__) этого нового объекта быть внешним, доступным, прототипом объекта функции конструктора (каждый функциональный объект автоматически имеет свойство прототипа ).
  3. Он делает переменную точку this к вновь созданному объекту.
  4. Он выполняет функцию конструктора, используя вновь созданный объект, когда упоминается this.
  5. Он возвращает вновь созданный объект, если функция конструктора не возвращается ссылка на объект не null. В этом случае вместо этого возвращается эта ссылка на объект.

Примечание: функция конструктора ссылается на функцию после ключевого слова new, как в

new ConstructorFunction(arg1, arg2)

Как только это будет сделано, если запрошено неопределенное свойство нового объекта, скрипт проверит объект объекта [[prototype]] для этого свойства. Вот как вы можете получить что-то похожее на традиционное наследование классов в JavaScript.

Самая сложная часть этого вопроса - это номер 2. Каждый объект (включая функции) имеет это внутреннее свойство, называемое [[prototype]] . Он может установить только во время создания объекта, либо с помощью new , с Object.create , либо на основе литерала (по умолчанию функции Function .prototype, номера в Number.prototype и т. д.). Его можно прочитать только с помощью Object.getPrototypeOf (someObject) . Существует no другой способ установить или прочитать это значение.

Функции, в дополнение к скрытому свойству [[prototype]] , также имеют свойство, названное prototype , и именно это вы можете получить и изменить для предоставления унаследованных свойств и методов для объектов, которые вы делаете.


Вот пример:

ObjMaker = function() {this.a = 'first';};
// ObjMaker is just a function, there's nothing special about it that makes 
// it a constructor.

ObjMaker.prototype.b = 'second';
// like all functions, ObjMaker has an accessible prototype property that 
// we can alter. I just added a property called 'b' to it. Like 
// all objects, ObjMaker also has an inaccessible [[prototype]] property
// that we can't do anything with

obj1 = new ObjMaker();
// 3 things just happened.
// A new, empty object was created called obj1.  At first obj1 was the same
// as {}. The [[prototype]] property of obj1 was then set to the current
// object value of the ObjMaker.prototype (if ObjMaker.prototype is later
// assigned a new object value, obj1's [[prototype]] will not change, but you
// can alter the properties of ObjMaker.prototype to add to both the
// prototype and [[prototype]]). The ObjMaker function was executed, with
// obj1 in place of this... so obj1.a was set to 'first'.

obj1.a;
// returns 'first'
obj1.b;
// obj1 doesn't have a property called 'b', so JavaScript checks 
// its [[prototype]]. Its [[prototype]] is the same as ObjMaker.prototype
// ObjMaker.prototype has a property called 'b' with value 'second'
// returns 'second'

Это похоже на наследование класса, потому что теперь любые объекты, которые вы используете с помощью new ObjMaker(), также, похоже, унаследовали свойство «b».

Если вы хотите что-то вроде подкласс, то вы это делаете:

SubObjMaker = function () {};
SubObjMaker.prototype = new ObjMaker(); // note: this pattern is deprecated!
// Because we used 'new', the [[prototype]] property of SubObjMaker.prototype
// is now set to the object value of ObjMaker.prototype.
// The modern way to do this is with Object.create(), which was added in ECMAScript 5:
// SubObjMaker.prototype = Object.create(ObjMaker.prototype);

SubObjMaker.prototype.c = 'third';  
obj2 = new SubObjMaker();
// [[prototype]] property of obj2 is now set to SubObjMaker.prototype
// Remember that the [[prototype]] property of SubObjMaker.prototype
// is ObjMaker.prototype. So now obj2 has a prototype chain!
// obj2 ---> SubObjMaker.prototype ---> ObjMaker.prototype

obj2.c;
// returns 'third', from SubObjMaker.prototype

obj2.b;
// returns 'second', from ObjMaker.prototype

obj2.a;
// returns 'first', from SubObjMaker.prototype, because SubObjMaker.prototype 
// was created with the ObjMaker function, which assigned a for us

Я прочитал тон мусора на эту тему, прежде чем, наконец, найду эту страницу , где это объясняется очень хорошо с приятным диаграммы.

10
задан sdoca 26 August 2010 в 15:45
поделиться

1 ответ

Нажмите на проект

Запуск от имени -> Сборка Maven...

Цель -> gwt:debug -e -X

Выполнить

18
ответ дан 3 December 2019 в 20:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: