Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .equals () переопределяется для сравнения содержимого:
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // It prints false (reference comparison)
System.out.println(s1.equals(s2)); // It prints true (content comparison)
Я никоим образом не хочу конкурировать с ответом Марка, но просто хотел выделить часть, которая, наконец, заставила все щелкнуть как кого-то нового в наследовании Javascript и цепочке его прототипов .
Только свойство читает поиск цепи прототипа, а не записи. Поэтому, когда вы устанавливаете
myObject.prop = '123';
, он не ищет цепочку, но когда вы устанавливаете
myObject.myThing.prop = '123';
, внутри этой операции записи происходит тонкое чтение найдите myThing, прежде чем писать на его опоре. Вот почему запись в object.properties из дочернего объекта происходит у объектов родителя.
Я хотел бы добавить пример прототипического наследования с ответом javascript на @Scott Driscoll. Мы будем использовать классический шаблон наследования с Object.create (), который является частью спецификации EcmaScript 5.
Сначала мы создаем объектную функцию «Родитель»
function Parent(){
}
Затем добавьте прототип функции «Родительский объект»
Parent.prototype = {
primitive : 1,
object : {
one : 1
}
}
Создать функцию объекта «Ребенок»
function Child(){
}
Назначить прототип ребенка (сделать наследование прототипа ребенка из исходного прототипа)
Child.prototype = Object.create(Parent.prototype);
Назначить собственный конструктор прототипа «Ребенок»
Child.prototype.constructor = Child;
Добавить метод «changeProps» к прототипу ребенка, который будет переписывать значение свойства «примитив» в объекте Child и изменить «object.one» «значение как в дочерних, так и родительских объектах
Child.prototype.changeProps = function(){
this.primitive = 2;
this.object.one = 2;
};
Инициировать родительские (папы) и дочерние (сыновные) объекты.
var dad = new Parent();
var son = new Child();
Вызов метода Child (son) changeProps
son.changeProps();
Проверить результаты.
Родительское примитивное свойство не изменилось
console.log(dad.primitive); /* 1 */
Свойство примитивного ребенка изменено (переписано)
console.log(son.primitive); /* 2 */
Свойства родительского и дочернего объекта. изменены
console.log(dad.object.one); /* 2 */
console.log(son.object.one); /* 2 */
Рабочий пример здесь http://jsbin.com/x exurukiso / 1 / edit /
Дополнительная информация о Object.create здесь https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object / создать