javascript: вопрос о конструкторе ** новое ** ключевое слово - PullRequest
1 голос
/ 12 мая 2011

со страницы https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Details_of_the_Object_Model:

Когда JavaScript видит новый оператор, он создает новый общий объект и передает этот новый объект в качестве значения это ключевое слово для WorkerBee функция конструктора. Конструктор Функция явно устанавливает значение собственность проектов, и неявно устанавливает значение внутреннего proto свойство к значению WorkerBee.prototype. (Это свойство имя имеет два символа подчеркивания в спереди и два в конце.) proto свойство определяет цепочку прототипов, используемую для возврата значения свойств. После того, как эти свойства установлены, JavaScript возвращает новый объект и оператор присваивания устанавливает переменную метку для этого объекта.

Так что, в принципе, если у нас есть эта функция:

function Bee(first_name, second_name){
    this.FirstName=name;
    this.SecondName=name;
}

Я хочу знать, в чем разница между выполнением чего-то вроде var bee1 = new Bee ("qwe", "asd"); против:

var bee1={};
bee1.__proto__=Bee.prototype;
var r=Bee.call(bee1, "qwe", "asd");
if(r!==undefined){
    bee1=r;
}

1 Ответ

4 голосов
/ 12 мая 2011

С одной стороны, var bee1 = new Bee("qwe", "asd"); совместим с разными браузерами. Некоторые браузеры не позволяют вам возиться с полем __proto__ объекта - IE является одним из них.

С другой стороны, это меньше кода и имеет больше смысла на первый взгляд.

Кроме того, во втором примере с первой строкой вы создали bee1, но не инициализировали его. Что касается второй строки, система будет считать ее Bee, но она по-прежнему не построена как одна. Если что-то пошло не так в конструкторе или где-то еще между созданием и созданием, вы можете получить полусгоревший Bee. Это в отличие от new Bee(...), который либо возвращает вам правильно сконструированный Bee, либо выдает исключение.

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