Не используйте старые версии Java.
Что происходит, так это то, что lombok помещает следующую строку в ваш eclipse.ini:
-javaagent: lombok.jar
И lombok.jar находится в каталоге C:\eclipse\jee-oxygen\eclipse
Проблема в том, что ярлык созданная установка Windows выглядит следующим образом:
Заполните путь «Начать с», и он будет работать:
Это не хак как таковой; JavaScript - это прототип языка, как определено в Википедии , где:
.. классы отсутствуют, а повторное использование поведения (известное как наследование в языках, основанных на классах) выполняется посредством процесса клонирования существующих объекты, которые служат прототипами.
Как говорится, классы не используются в JavaScript; каждый создаваемый вами объект происходит от JavaScript Object
; все объекты в JavaScript имеют объект-прототип
, и все экземпляры объектов, которые вы создаете, «наследуют» методы и свойства от объекта-прототипа своего объекта. Взгляните на ссылку на объект MDC prototype для получения дополнительной информации.
Начиная с этого момента, когда вы вызываете строку:
CHILDClass.prototype = new PARENTClass();
Это позволяет объекту CHILDClass
добавлять методы и свойства к своему объекту-прототипу из объекта PARENTClass
, что создает эффект, аналогичный идее наследования, присутствующей в языках на основе классов. . Поскольку объект прототип
влияет на каждый экземпляр, созданный для этого объекта, это позволяет методам и свойствам родительского объекта присутствовать в каждом экземпляре вашего дочернего объекта.
Если вы хотите вызвать конструктор родительского класса в конструктор вашего дочернего класса, вы используете функцию JavaScript call
; это позволяет вам вызывать конструктор родительского класса в контексте конструктора дочернего класса, тем самым устанавливая для вновь созданных прототипов свойств в вашем дочернем классе то, что они установлены, как в родительском классе.
Вам также не нужно ничего помещать там, где вы указали * 1
, поскольку эта строка используется просто для добавления методов и свойств к объекту прототипа дочернего класса; однако имейте в виду, что он вызывает конструктор родительского класса, поэтому, если есть какие-либо аргументы, которые являются основополагающими для работы конструктора родительского класса, вы должны проверить их наличие, чтобы избежать ошибок JavaScript.
Есть разница, но нет никакой разницы в этом примере.
Использование более подробного метода: new Array ()
имеет один дополнительный параметр в параметры: если вы передадите число в конструктор, вы получите массив такой длины:
x = new Array(5);
alert(x.length); // 5
Чтобы проиллюстрировать различные способы создания массива:
var a = [], // these are the same
b = new Array(), // a and b are arrays with length 0
c = ['foo', 'bar'], // these are the same
d = new Array('foo', 'bar'), // c and d are arrays with 2 strings
// these are different:
e = [3] // e.length == 1, e[0] == 3
f = new Array(3), // f.length == 3, f[0] == undefined
;
Другое отличие состоит в том, что при использовании new Array ()
вы можете установить размер массива, который влияет на размер стека. Это может быть полезно, если вы получаете переполнение стека ( Производительность Array.push vs Array.unshift ), что происходит, когда размер массива превышает размер стека, и он должен быть воссоздан. Таким образом, на самом деле, в зависимости от варианта использования, будет повышать производительность при использовании new Array ()
, потому что вы можете предотвратить переполнение.
Как указано в этот ответ , new Array (5)
фактически не добавит в массив пять неопределенных
элементов. Он просто добавляет место для пяти предметов. Имейте в виду, что использование Array
таким образом затрудняет использование array.length
для вычислений.
Приведенный выше пример будет выглядеть так:
var ParentClass = Class.extend({
constructor: function(baseVar) {
// do stuff
},
a: 'b',
c: 'd'
});
var ChildClass = ParentClass.extend({
e: 'f'
});
You can manually invoke the parent constructor in the subclass constructor like this:
CHILDClass = function (basevar) {
PARENTClass.call(this, basevar);
// do something;
};
The trick here is using the call
method, which allows you to invoke a method in the context of a different object. See the documentation of call
for more details.
У меня есть облегченная оболочка ООП javascript, которая обеспечивает наследование «как у классов», где вы можете переопределить базовые методы или вызвать базовые конструкторы или члены.
Вы определяете свои классы следующим образом:
//Define the 'Cat' class
function Cat(catType, firstName, lastName)
{
//Call the 'Animal' constructor.
Cat.$baseNew.call(this, firstName, lastName);
this.catType = catType;
}
//Extend Animal, and Register the 'Cat' type.
Cat.extend(Animal, { type: 'Cat' }, {
hello: function(text)
{
return "meaoow: " + text;
},
getFullName: function()
{
//Call the base 'Animal' getFullName method.
return this.catType + ": " + Cat.$base.getFullName.call(this);
}
})
//It has a built-in type system that lets you do stuff like:
var cat = new Cat("ginger", "kitty", "kat");
Cat.getType() // "Cat"
cat.getBaseTypesAndSelf() // ["Cat","Animal","Class"]
cat.getType() // "Cat"
cat.isTypeOf(Animal.getType()) // "True"
var dynamicCat = Class.createNew("Cat", ["tab","fat","cat"])
dynamicCat.getBaseTypesAndSelf() // ["Cat","Animal","Class"]
dynamicCat.getFullName() // tab: fat cat
исходный код доступен по адресу: Class.js
У меня также есть более подробная информация в моем блоге о ООП в javascript
Просто подумал, что упомяну некоторые проблемы с классическим шаблоном, который вы собираемся:
Итак, вы решаете 1. с помощью решения Аймана, которое Закас называет «Кража конструктора», но теперь вы вызываете конструктор дважды: один раз для вашего прототипа и один раз для похищения конструктора. Решение - для вашего прототипа используйте помощник, например, inheritPrototype (я показал всю его реализацию в этом посте: метод inheritPrototype FWIW, по сути, это произошло из комбинации страницы 181 книги Закаса и некоторого исследования Крокфорда.
Никакой конфиденциальности (но опять же, вам нужно будет использовать что-то вроде шаблона Durable Object, чтобы получить это, и это может быть не тем, что вы хотите )
У меня есть запущенные примеры всего этого на github !! !
Для меня было не менее сложной задачей по-настоящему ощутить оба: книги Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * книга и некоторые исследования Крокфорда.
Никакой конфиденциальности (но опять же, вам нужно будет использовать что-то вроде шаблона Durable Object, чтобы получить это, и это может быть не то, что вам нужно)
У меня есть запущенные примеры всего этого на github !!!
Это было точно так же Задача для меня по-настоящему ощутить оба: книги Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * книга и некоторые исследования Крокфорда.
Никакой конфиденциальности (но опять же, вам нужно будет использовать что-то вроде шаблона Durable Object, чтобы получить это, и это может быть не то, что вам нужно)
У меня есть запущенные примеры всего этого на github !!!
Это было точно так же Задача для меня по-настоящему ощутить оба: книги Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * d нужно использовать что-то вроде шаблона Durable Object, чтобы получить это, и это может быть не то, что вы хотите)
У меня есть запущенные примеры всего этого на github !!!
Для меня было не менее сложной задачей по-настоящему разобраться и в книгах Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * d нужно использовать что-то вроде шаблона Durable Object, чтобы получить это, и это может быть не то, что вы хотите)
У меня есть запущенные примеры всего этого на github !!!
Для меня было столь же сложной задачей по-настоящему разобраться и в книгах Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * Решение - поставьте проверку оператора if для любой из функций вашего прототипа, а затем определите прототип с литералом прототипа.
У меня есть запущенные примеры всего этого на github !!!
Это было не менее сложной задачей Мне нужно по-настоящему взглянуть на книги Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * Решение - поставьте проверку оператора if для любой из функций вашего прототипа, а затем определите прототип с литералом прототипа.
У меня есть запущенные примеры всего этого на github !!!
Это было не менее сложной задачей Мне нужно по-настоящему взглянуть на книги Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * Книги Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * Книги Закаса и Крокфорда по созданию и наследованию объектов. Мне также нужно было попробовать несколько различных фреймворков JavaScript TDD. Поэтому я решил написать эссе по TDD Frameworks и JavaScript Object Creation & Inheritance. Имеет работающий код и тесты jspec! Вот ссылка: * Мое эссе / книга с открытым исходным кодом на GitHub