Разработка прототипа Объекта в JavaScript повреждает jQuery?

Старый добрый Ctrl + Вкладка для зеркального отражения назад и вперед между открытыми документами.

Visual Studio на самом деле обеспечивает очень хороший Ctrl + Вкладка реализация; я особенно ценю, что Ctrl + Вкладка порядок активации документа последний раз используется, порядок, а не простой "слева направо" заказывают, так, чтобы Ctrl + Вкладка (нажатие однажды и выпуск) мог использоваться неоднократно для зеркального отражения назад и вперед между двумя последний раз используемыми документами, даже когда существует больше чем два открытые документа.

35
задан Shashank Agrawal 7 March 2016 в 14:53
поделиться

3 ответа

Никогда не следует расширять Object.prototype . Это гораздо больше, чем просто нарушение jQuery; он полностью нарушает функцию Javascript «объект как хэш-таблицы». Не делайте этого.

Вы можете спросить Джона Ресига, и он скажет вам то же самое .

20
ответ дан 27 November 2019 в 07:01
поделиться

Я сомневаюсь, что добавление функции в Object.prototype напрямую нарушает работу jQuery. Просто убедитесь, что каждый цикл for..in на вашем сайте заключен в проверку hasOwnProperty, поскольку вы добавляете функцию глобально, и результат повторения может быть непредсказуемым:

Object.prototype.foo = function() {};    
var myObject = {m1: "one", m2: "two" };

for(var i in myObject) { if(myObject.hasOwnProperty(i)) {
   // Do stuff... but not to Object.prototype.foo
}}
-1
ответ дан 27 November 2019 в 07:01
поделиться

Я согласен, добавив кое-что в Object.prototype требует осторожности, и его следует избегать. Поищите другие решения, такие как:

Добавление его к объекту и последующий доступ к нему с помощью вызова или apply , если необходимо. Например:

Object.foo = function () { return this.whatever()}

Затем вызовите это для объекта:

Object.foo.call(Objname);  // this invokes the function as though it were a
                           // method of Objname.  That is, its like Objname.foo()

Для удовольствия вы можете добавить следующее (да, я знаю, что это немного опасно ...):

Function.using = Function.call; // syntactic sugar

Теперь вы можете написать Object.foo. using (Objname ) и читается как караул.

Но, как правило, избегайте изменения каких-либо крупных прототипов.

5
ответ дан 27 November 2019 в 07:01
поделиться
Другие вопросы по тегам:

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