Таким образом, что, если пользовательские HTML-атрибуты не являются допустимым XHTML?

Значение в прототипе имеет поведение ключа, которое отличается от свойства, установленного непосредственно в экземпляре. Попробуйте это:

// Create a constructor
function A() {}

// Add a prototype property
A.prototype.name = "Freddy";

// Create two object instances from
// the constructor
var a = new A();
var b = new A();

// Both instances have the property
// that we created on the prototype
console.log(a.name); // Freddy
console.log(b.name); // Freddy

// Now change the property on the
// prototype
A.prototype.name = "George";

// Both instances inherit the change.
// Really they are just reading the
// same property from the prototype
// rather than their own property
console.log(a.name); // George
console.log(b.name); // George

Это было бы невозможно без прототипного наследования.

Вы можете проверить, является ли свойство свойством экземпляров или свойством прототипа, используя метод hasOwnProperty.

console.log(a.hasOwnProperty("name")); // false

Экземпляр может переопределить значение prototype.

b.name = "Chris";
console.log(b.hasOwnProperty("name")); // true
console.log(a.name); // George
console.log(b.name); // Chris

И вернитесь к значению prototype.

delete b.name;
console.log(b.hasOwnProperty("name")); // false
console.log(b.name); // George

Это мощная часть прототипического наследования.

В другом шаблоне:

function A() {
  this.name = "George";
}

Переменная this.name объявляется снова с каждым новым экземпляром.

Имеет смысл иметь методы как функции, объявленные в прототипе. Вместо того, чтобы определение функции повторно объявлялось в каждом экземпляре, все экземпляры могут совместно использовать одну функцию.

С точки зрения переменных, а не функций, прототип может быть использован для значений по умолчанию в случае, когда экземпляр не устанавливает свое собственное значение.

Код в скрипке

78
задан Constantine 15 June 2009 в 07:26
поделиться

9 ответов

Следствием этого является то, что w3c появляется через 2, 5, 10 лет и создает атрибут с тем же именем. Теперь ваша страница не работает.

HTML5 предоставит тип атрибута данных для допустимых настраиваемых атрибутов (например, data-myattr = "foo"), так что, возможно, вы могли бы начать использовать его сейчас и быть в разумной степени защищенным от конфликтов имен в будущем.

Наконец, вы можете упустить из виду, что настраиваемая логика является рациональным элементом атрибута класса. Хотя обычно это считается атрибутом стиля, на самом деле это законный способ установки пользовательских мета-свойств для элемента. К сожалению, вы в основном ограничены логическими свойствами, поэтому HTML5 добавляет префикс данных.

Кстати, под «в основном логическим» я подразумеваю в принципе. На самом деле ничто не мешает вам использовать разделитель в имени вашего класса для определения пользовательских значений, а также атрибутов.

class = "document docId.56 permissions.RW"

76
ответ дан 24 November 2019 в 10:36
поделиться

Я думаю, что разработчики проводят валидацию только для проверки, но есть кое-что сказать о том, что разметка остается чистой. Однако, поскольку каждый (предупреждение о преувеличении!) Браузер отображает все по-разному, стандарта на самом деле нет. Мы стараемся следовать стандартам, потому что это заставляет нас чувствовать, что у нас есть хоть какое-то направление. Некоторые люди утверждают, что соблюдение стандарта кода предотвратит проблемы и конфликты в будущем. Мое мнение: черт возьми, что сегодня никто не реализует стандарты правильно и полностью, с таким же успехом можно предположить, что весь ваш код в конечном итоге выйдет из строя. Если он работает, он работает, используйте его, если он не беспорядочный или вы просто пытаетесь игнорировать стандарты, чтобы привязать его к W3C или чему-то еще. Думаю, важно помнить, что стандарты внедряются очень медленно, так ли сильно изменился Интернет за 5 лет. Я' Я уверен, что любой человек получит уведомление за годы, когда ему понадобится исправить потенциальный конфликт. Нет причин планировать совместимость стандартов в будущем, когда вы даже не можете полагаться на сегодняшние стандарты.

О, я чуть не забыл, если ваш код не подтвердит, 10 маленьких котят умрут. Вы убийца котят?

0
ответ дан 24 November 2019 в 10:36
поделиться

Проблема с валидацией состоит в том, что СЕГОДНЯ это может не иметь значения, но вы не можете знать, будет ли это иметь значение завтра (и, по закону Мерфи, это БУДЕТ иметь значение завтра).

Это просто лучше выбрать перспективную альтернативу. Если они не существуют ( они есть в данном конкретном случае ), путь состоит в том, чтобы изобрести перспективную альтернативу.

Использование настраиваемых атрибутов, вероятно, безвредно, но все же зачем выбирать потенциально опасное решение только потому, что вы думаете (никогда не можете быть уверены), что оно не причинит вреда ?. Возможно, стоит обсудить этот вопрос дальше, если альтернатива, ориентированная на будущее, была слишком дорогостоящей или громоздкой, но это определенно не так.

2
ответ дан 24 November 2019 в 10:36
поделиться

Использование нестандартного HTML может заставить браузер отображать страницу в «режиме причуд», и в этом случае некоторые другие части страница может отображаться по-другому, и другие вещи, такие как позиционирование, могут немного отличаться. Однако использование пользовательского DTD может обойти это.

0
ответ дан 24 November 2019 в 10:36
поделиться

Поскольку они нестандартны, вы не представляете, что может случиться ни сейчас, ни в будущем. Как говорили другие, W3C может начать использовать те же имена в будущем. Но еще опаснее то, что вы не знаете, что сделали разработчики «browser xxx», когда столкнулись с ними.

Может быть, страница отображается в режиме причуд, может быть, страница не отображается на все в каком-нибудь непонятном мобильном браузере, возможно, в браузере произойдет утечка памяти, может быть, вирус-убийца захлебнется на вашей странице и т. д., т. д. и т. д.

Я знаю, что религиозное следование стандартам может показаться снобизмом. Однако если вы столкнулись с проблемами из-за того, что не следуете им, вы, как правило, перестаете так думать. Однако тогда в основном уже поздно,

0
ответ дан 24 November 2019 в 10:36
поделиться

Ну, это зависит от вашего клиента / босса и т. Д., Они требуют, чтобы он проверял XHTML?

Некоторые люди говорят, что существует множество обходных путей - и в зависимости от сцены они могут отлично работать. Сюда входит добавление классов с использованием атрибута rel , и кто-то, кто даже написал свой собственный синтаксический анализатор для извлечения JSON из комментариев HTML.

HTML5 предоставляет стандартный способ сделать это, добавив к вашим настраиваемым атрибутам префикс «data-». Я бы порекомендовал сделать это сейчас, так как есть вероятность, что вы можете использовать атрибут, который будет использоваться в дальнейшем в стандартном XHTML.

1
ответ дан 24 November 2019 в 10:36
поделиться

Следствием этого является то, что w3c появляется через 2, 5, 10 лет и создает атрибут с таким же именем. Теперь ваша страница не работает.

HTML5 будет предоставлять тип атрибута данных для допустимых настраиваемых атрибутов (например, data-myattr = "foo"), так что, возможно, вы могли бы начать использовать его сейчас и быть в разумной степени защищенным от конфликтов имен в будущем.

Наконец, вы можете упустить из виду, что настраиваемая логика является рациональной составляющей атрибута класса. Хотя обычно это считается атрибутом стиля, на самом деле это законный способ установки пользовательских мета-свойств для элемента. К сожалению, вы в основном ограничены логическими свойствами, поэтому HTML5 добавляет префикс данных.

Кстати, "

7
ответ дан 24 November 2019 в 10:36
поделиться

Проверка - это не самоцель, а инструмент, который нужно использовать для помогают выявлять ошибки на раннем этапе и сокращают количество загадочных проблем с отображением и поведением, с которыми ваши веб-страницы могут столкнуться при использовании в нескольких типах браузеров.

Добавление настраиваемых атрибутов не повлияет ни на одну из этих проблем сейчас, и вряд ли повлияет на в будущем, но поскольку они не проверяются, это означает, что, когда вы приступите к оценке результатов проверки вашей страницы, вам нужно будет тщательно выбирать между важными проблемами проверки и теми, которые не имеют значения. Каждый раз, когда вы меняете свою страницу и проводите повторную валидацию, вам придется повторять эту операцию. Если ваша страница полностью проверена, вы получите красивое зеленое сообщение PASS,

10
ответ дан 24 November 2019 в 10:36
поделиться

Я видел, как люди, одержимые проверкой правильности, делали гораздо худшие / странные вещи, чем использование простого настраиваемого атрибута:

<base href="http://example.com/" /><!--[if IE]></base><![endif]-->

На мой взгляд, настраиваемые атрибуты действительно не имеют значения. Как говорят другие, было бы неплохо следить за будущим добавлением атрибутов в стандарты. Но теперь у нас есть атрибуты data- * в HTML5, поэтому мы спасены.

Что действительно важно, так это то, что у вас есть правильно вложенные теги и правильно заключенные значения атрибутов.

Я даже использую собственные имена тегов (введенные HTML5, например, header, footer и т. Д.), Но у них есть проблемы в IE.

Кстати,

8
ответ дан 24 November 2019 в 10:36
поделиться
Другие вопросы по тегам:

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