Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Правильно ли так делать: Object.prototype.a_sa? (https://javascript.ru/forum/misc/52386-pravilno-li-tak-delat-object-prototype-a_sa.html)

Max_Cohen 17.12.2014 09:38

Правильно ли так делать: Object.prototype.a_sa?
 
Добрый день,

if (!Object.prototype.gA)
{
	Object.prototype.gA=function(a)
	{
		return this.getAttribute(a);
	}
}


Правильно ли так делать? Почему?

Задача была сократить getAttribute() на такое gA()

Спасибо.

Erolast 17.12.2014 10:49

Нет. Во-первых, никогда не сокращай переменные - никто кроме тебя такой код читать не сможет (да и сам ты через некоторое время все забудешь). Во-вторых, прототип объекта нужно засирать nonenumerable свойствами, иначе поломаются циклы for in. В-третьих, метод getAttribute применяется к DOM-объектам и находится в HTMLElement.prototype, зачем ты всё остальное засоряешь?

Aetae 17.12.2014 10:58

Max_Cohen, на всякий случай повторю за Erolast: сокращать не надо. Минусов куча, а единственный плюс легко перекрывается IDE.
Потому ответ - использовать IDE с автодополнением, и написание сведётся до тех же двух букв.

danik.js 17.12.2014 11:08

Зачем тебе getAttribute? Видимо ты не в курсе про свойства?
this.id
this.className
this.title
this.checked
this.href
this.src

Aetae 17.12.2014 11:46

danik.js, getAttribute няшнее. Свойства все в разнобой, а ровные строчки getAttribute'ов радуют глаз.:D

krutoy 17.12.2014 17:37

Вот так попробуй
<html>
  <head>
  </head>
  <body>

<div id="one">
<div id="inner"></div>
</div>
<p id="two"></p>

<script>
Object.defineProperty(HTMLElement.prototype, "gA", {value: HTMLElement.prototype.getAttribute, enumerable: false})
arr=[
   document.querySelector("div").gA("id"),
   document.querySelector("div").querySelector("div").gA("id"),
   document.querySelector("p").gA("id")
]

alert(arr)

</script>
  </body>
 
</html>

Max_Cohen 18.12.2014 09:47

Добрый день,

Спасибо Вам за правильные ответы. Еще есть вопрос, и есть такой пример:
<html>
<head>
<script src="script.js"type="text/javascript"></script>
</head>
<body>
<script type="text/javascript">
console.log(_bodyWidth);
</script>
Сам script.js:
var _bodyWidth=document.body.clientWidth;
Происходит ошибка. Cannot read property 'clientWidth' of null. Как Я понял, до появления тэга body JavaScript не может определить этот тэг. Ну и понятно, свойство clientWidth.

Тогда если Я сделаю так:
<html>
<head>
<!--убрал отсюда-->
</head>
<body>
<!--поставил сюда-->
<script src="script.js"type="text/javascript"></script>
<script type="text/javascript">
console.log(_bodyWidth);
</script>
То все хорошо. Я получаю ширину тэга body.

Вопрос, а почему так происходит? Можно ли оставить тэг script в head и получить свойства clientWidth от body.

Пробовал через window.onload=function(){...} добавить в script.js, но тогда нельзя в body еще раз объявить window.onload. Правильно?

Спасибо.

Erolast 18.12.2014 09:53

https://developer.mozilla.org/en-US/...MContentLoaded

Aetae 18.12.2014 11:41

Max_Cohen,
http://learn.javascript.ru/introduction-browser-events#назначение-обработчиков-по-стандарту

Max_Cohen 18.12.2014 14:03

Добрый день,

Спасибо всем. Иду изучать и колдовать) Еще раз спасибо!


Часовой пояс GMT +3, время: 11:07.