Как определить, содержит ли объект свойство, указывающее на конкретную ссылку? - PullRequest
0 голосов
/ 03 марта 2011

Учитывая эти два объекта:

var object1 = {
    a: function() {},
    b: function() {},
    c: function() {}
};

var object2 = {
    d: function() {},
    e: function() {},
    f: function() {}
};

Здесь у нас есть два объекта, каждый из которых содержит 3 свойства, которые являются функциональными объектами (или, если быть точным, ссылками на функциональные объекты).

Допустим, f является ссылкой на один из этих 6 функциональных объектов. (Было объявлено так: var f = object2.e; или var f = object1.c;.)

Как определить, находится ли ссылка f среди 3 ссылок / свойств object1?

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Единственное, что вы можете сделать, это перебрать свойства объекта:

var pointsToObject1 = false;

for(var prop in object1) {
    // maybe call hasOwnProperty but I don't think it is necessary here.
    if(f === object1[prop]) {
        pointsToObject1 = true;
        break;
    }
}

f на самом деле не указывает на свойство одного из объектов. Это больше похоже на то, как f и свойство указывают на одно и то же значение / объект.

0 голосов
/ 04 марта 2011

Итак, это мое текущее решение (на основе ответа @ Felix):

function isIn(r, o) {
    for (var p in o) {
        if ( o.hasOwnProperty(p) ) {
            if ( o[p] === r ) return true;
        }
    }
    return false;
}

А потом:

var f = object1.c;

и

isIn(f, object1) // alerts "true"
isIn(f, object2) // alters "false"

Демонстрационная версия: http://jsfiddle.net/W3Lub/

Что ты думаешь? Мне трудно поверить, что ни один браузер или библиотека не предлагает такую ​​функцию?!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...