Как я могу получить доступ к свойствам в директивах масштаба родителей в angularJS? [Дубликат]

Оператор == всегда предназначен для сравнения ссылок на объекты, тогда как метод сравнения строк .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)
967
задан Peter Mortensen 7 December 2017 в 13:57
поделиться

3 ответа

1698
ответ дан Community 15 August 2018 в 17:13
поделиться

Я никоим образом не хочу конкурировать с ответом Марка, но просто хотел выделить часть, которая, наконец, заставила все щелкнуть как кого-то нового в наследовании Javascript и цепочке его прототипов .

Только свойство читает поиск цепи прототипа, а не записи. Поэтому, когда вы устанавливаете

myObject.prop = '123';

, он не ищет цепочку, но когда вы устанавливаете

myObject.myThing.prop = '123';

, внутри этой операции записи происходит тонкое чтение найдите myThing, прежде чем писать на его опоре. Вот почему запись в object.properties из дочернего объекта происходит у объектов родителя.

136
ответ дан Scott Driscoll 15 August 2018 в 17:13
поделиться
  • 1
    Хотя это очень простая концепция, она может быть не очень очевидна, поскольку, как мне кажется, многие пропустили ее. Хорошо сказано. – moljac024 5 June 2014 в 22:51
  • 2
    Отличное замечание. Я убираю, разрешение свойства non object не включает чтение, а разрешение свойства объекта. – Stephane 2 August 2014 в 08:26
  • 3
    Зачем? Какова мотивация для записи собственности, не поднимающаяся на цепочку прототипов? Кажется сумасшедшим ... – Jonathan. 16 August 2014 в 03:42
  • 4
    @Джонатан. это соответствует тому, как работают прототипы Javascript. Ваш вопрос относится к дизайну JS, а не к угловому – Greg 24 October 2014 в 03:50
  • 5
    Было бы здорово, если бы вы добавили простой простой пример. – tylik 8 November 2014 в 12:29

Я хотел бы добавить пример прототипического наследования с ответом 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 / создать

19
ответ дан tylik 15 August 2018 в 17:13
поделиться
Другие вопросы по тегам:

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