Введение в экземпляр оператора
В JavaScript, судя по типу переменной, вы будете использовать оператор TypeOF. При использовании оператора TypeOF у вас будет проблема, используя ссылочный тип для хранения значения. Независимо от того, какой тип объекта ссылается, он вернет «объект». Ecmascript представляет еще один экземпляр оператора Java, чтобы решить эту проблему. Оператор экземпляра аналогичен оператору TypeOF и используется для определения типа обработанного объекта. В отличие от метода типа, метод экземпляра требует, чтобы разработчик явно подтвердил, что объект является конкретным типом. Например:
Перечисление 1. Пример экземпляра
var ostringObject = new String ("Hello World"); console.log (ostringobject exantef string); // вывод "True"Этот код спрашивает "Является ли переменная ostringObject экземпляром объекта строки?" OstringObject действительно является экземпляром объекта String, поэтому результат является «true». Несмотря на то, что метод EncementOF не так гибкий, как метод TypeOF, полезен, когда метод TypeOF возвращает «объект».
Общее использование экземпляра оператора:
Вообще говоря, использование экземпляра - это определение того, принадлежит ли экземпляр к определенному типу. Например:
Листинг 2. Общее использование экземпляра
// Определите, является ли Foo экземпляром функции класса Foo foo () {} var foo = new foo (); console.log (foo ancessionof foo) // trueКроме того, более тяжелая точка заключается в том, что экземпляр может быть использован в отношениях наследования, чтобы определить, принадлежит ли экземпляр к его родительскому типу. Например:
Листинг 3. Использование экземпляра в отношениях наследства
// Определите, является ли Foo экземпляром класса Foo и является ли это экземпляром функции его родительского типа aoo () {} function foo () {} foo.prototype = new aoo (); // javaScript prototype prototype prototype nearritance var foo = new foo (); console.log (foo ancessionof foo) // true console.log (exanceof aoo) // trueВ приведенном выше коде, родительский класс в уровне отношений наследования оценивается. При многослойных отношениях наследования также применим экземпляр оператора.
Вы действительно понимаете экземпляр оператора?
Прочитав приведенный выше пример кода, как вы думаете, экземпляр оператора очень прост? Давайте посмотрим на какое -то сложное использование.
Перечисление 4. экземпляры комплексного использования
console.log (exantection exactionof object); // true console.log (функция функции функции); // true console.log (число exanceOf numberOf); // false console.log (string instanceOf string); // false console.log (функция экземпляра объекта); // true console.log (foo instanceOf function); // true Console.log (foo encessole).
Вы снова запутались после прочтения приведенного выше кода? Почему объект и функционирование экземпляра сами по себе равны, в то время как другой экземпляр самих не является истинным? Как это объяснить? Чтобы принципиально понять загадку экземпляра, нам нужно начать с двух аспектов: 1. Как определить этого оператора в спецификации языка. 2. Механизм наследования прототипа JavaScript.
Листинг 5. Encement Of Code оператора JavaScript
function exance_of (l, r) {// l представляет левое выражение, r представляет собой правое выражение var o = r.prototype; // Принять прототип отображения r l = l .__ Proto __; // Принять неявный прототип L while (true) {if (l === null) вернуть false; if (o === l) // Вот точка: когда o строго равен L, вернуть true; L = l .__ Proto__; }}Листинг 6. Экземпляр объекта объекта
// ради удобства экспрессии сначала различает левое выражение и правое выражение objectl = object, objectr = object; // следующее предназначено для постепенного вывода o = objectr.prototype = object.prototype l = objectl .__ proto__ = function.prototype // Первое решение - o! = L // Цикл, чтобы выяснить, есть ли у L по -прежнему __proto__ l = retury.prototy.
Листинг 7. Функция функции функции
// Для удобства экспрессии сначала различает левую экспрессию и правую экспрессию function = function, functr = function; // следующее должно постепенно вывести o = functionr.prototype = function.prototype l = functionl .__ Proto__ = function.prototype // Первое суждение o == l // return true
Листинг 8. Foo Exance of Foo
// ради удобства выражения сначала различает левое выражение и правое выражение дурака = foo, foor = foo; // следующее следует постепенно вывести в соответствии со спецификациями o = foor.prototype = foo.prototype l = дурак .__ Proto__ = function.prototype // Первое суждение - o! = L // Первое суждение - O! = L // Цикл - это то, что L по -прежнему имеет __proto__ l = function.prototype. это выяснить, имеет ли L до сих пор __proto__ l = object.prototype .__ Proto__ = null // Третье суждение L == null // return false
Кратко проанализируйте применение экземпляра в механизме наследования доджо
В JavaScript нет концепции множественного наследства, как Java. Однако при объявлении классов в додзо наследство от нескольких классов разрешено. Давайте возьмем Dojo 1.6.1 в качестве примера.
Листинг 9. Многочисленное наследство в додзё
dojo.declare ("aoo", null, {}); dojo.declare ("boo", null, {}); dojo.declare ("foo", [aoo, boo], {}); var foo = new foo (); console.log (foo insomantof aoo); // true console.log (foo instanceof boo); // ложная консоль.log (foo.isinstanceof (aoo)); // true console.log (foo.isinstanceof (boo); // true console.log (foo.isinstanceof (boo);В приведенном выше примере Фу наследует от AOO и BOO, но при использовании оператора экземпляра, чтобы проверить, является ли Foo экземпляром BOO, он возвращает FALSE. На самом деле, внутри Dojo Foo все еще наследуется только от AOO и использует механизм микшина для копирования методов и свойств в классе Boo для Foo. Следовательно, когда оператор экземпляра используется для проверки, является ли он экземпляром BOO, FALSE будет возвращен. Таким образом, Dojo добавляет новый метод, называемый iSinstanceOF для каждого экземпляра класса, и использует этот метод для проверки множественных наследственности.