функция копирования свойств
Сорри за стоко тем но прошу обьяснить новичку
Непонятны некоторые куски кода
// копирует все свойства из src в dst,
// включая те, что в цепочке прототипов src до Object
function mixin(dst, src){
// tobj - вспомогательный объект для фильтрации свойств,
// которые есть у объекта Object и его прототипа
var tobj = {}
for(var x in src){
// копируем в dst свойства src, кроме тех, которые унаследованы от Object
if((typeof tobj[x] == "undefined") || (tobj[x] != src[x])){
dst[x] = src[x];
}
}
// В IE пользовательский метод toString отсутствует в for..in
if(document.all && !document.isOpera){
var p = src.toString;
if(typeof p == "function" && p != dst.toString && p != tobj.toString &&
p != "\nfunction toString() {\n [native code]\n}\n"){
dst.toString = src.toString;
}
}
}
А именно if((typeof tobj[x] == "undefined") || (tobj[x] != src[x])) То есть копируются только те свойства и методы которые имеют тип undefined. И какой смысл в них? и те которые не равны src[x]. Вот тут вообще запутался копирование же и идёт из src а tobj вообще пустой обьект. А также
// В IE пользовательский метод toString отсутствует в for..in
if(document.all && !document.isOpera){
var p = src.toString;
if(typeof p == "function" && p != dst.toString && p != tobj.toString &&
p != "\nfunction toString() {\n [native code]\n}\n"){
dst.toString = src.toString;
}
}
Тут тоже не понятно toString вроде до этого и не использовался и вообще что этот кусок кода делает. |
Цитата:
Цитата:
Цитата:
Цитата:
|
Читал про прототипы понял. Это метод объекта который добавляет новые методы и свойства.
Ну там написано что в ИЕ нету toString тогда вообще зачем этот кусок кода |
Цитата:
Цитата:
|
Я это и иммел ввиду ведь этот кусок кода должен работать если браузер ИЕ почему?
|
Потому что в IE пользовательский метод toString отсутствует в for..in. Что непонятно-то?
|
Но он же до этого там и не использовался так какая разница есть он в ИЕ или нету
|
|
У меня с английским не очень
|
(tobj[x] != src[x])
Это чтобы не копировались стандартные методы обьекта? typeof tobj[x] == "undefined") А это проверка есть такой метод вТобдж если нету значит не стандартный? p.s. стандартные методы==методы которые и так есть у всех обьектов |
zzz, проспись хорошенько:)
|
А что не так?
Проверка чтобы не копировались свойства которые и так есть у всех обьектов разве я не прав? |
Цитата:
зы: не насилуй свой моск... |
Когда я отдохнувший меня в КС тянет)
|
Осталось не понятно только условие
if(typeof p == "function" && p != dst.toString && p != tobj.toString &&
p != "\nfunction toString() {\n [native code]\n}\n"){
|
И что тут непонятного?
|
Ну вроде P должно быть в формате строки из-за toString а тут ==function должно быть раз, во вторых повторюсь зачем весь этот кусок кода(ведь он только для ИЕ) а также
p != "\nfunction toString() {\n [native code]\n}\n"
что это вообще значит |
Цитата:
Цитата:
Цитата:
alert({}.toString)
Так и будешь на каждый чих в форум писать? |
Цитата:
Цитата:
Всё равно Р равно src в формате строки значит и Р это строка (поправте если я не прав) И что такое [native code] Цитата:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
Экономия символов.
|
Цитата:
|
zzz,
а вас учителя в школе не били (или бьют)? Цитата:
|
Блин так вы про это. Ну хорошо а какой смысл от использования toString
|
Я имею ввиду если он не чего не возвращает зачем он нужен?
|
Я сначла подумал что toString это свойство класса Animal
this.toString = function() {
return name+" на расстоянии "+this.distance
}
Но если названия toString заменить и там и там то не работает Кажется я понял всё это дополнение для ИЕ как раз ради этого свойства ведь оно toString а его как раз в операторе цикла for...in...нету. Осталось только понять почему свойство называется именно toString ведь скобок нету значит и к строковому типу не приводит и заменить название нельзя тогда не работает... |
Цитата:
|
zzz,
извини, но я устал разгребать кашу в твоей голове :) Поспи, прочитай еще раз статьи на этом сайте, может поймешь. |
var someObject = {
"title" : "Я — объект",
"toString" : function() {
return "Но если меня хотят использовать, как строку, я буду ею!";
}
}
alert(someObject.title); // Я — объект
alert(someObject); // Но если меня хотят использовать, как строку, я буду ею!
|
Цитата:
http://www.translate.ru/text_Translation.aspx http://translate.google.com/translate_t# |
То есть всё таки toString превращает в строку и выводит эту строку с помошью модального окна. Но зачем Андрей у вас как "Я объект" как "Но если меня..." вывелись одинаково хотя к строковому типу превели только вторую запись. Может чтобы использовать свойства и методы объекта String?(поправте если я не прав)
|
zzz,
toString() возвращает строковое представление объекта. Она вызывается, например, когда вы пытаетесь использовать объект, как строку: вывести в модальном диалоге alert, или провести конкатенацию с другой строкой. |
Но можно выводить и не ввиде строки например "title" : "Я — объект",
и как уже сказали там не toString() а toString |
Цитата:
alert('"title" : "'+someObject.title+'"');
Цитата:
|
Дак почему метод тогда называется toString? Он превращает значение в строку или нет? Ответе наконец-то. Если превращает то почему скобок то нету. Если превращает то зачем чтобы использовать методы и свойства встроеного объекта String?
|
Цитата:
var a=1, b=2, c=true; alert(a.toString == b.toString); alert(a.toString == c.toString); alert(typeof a); alert(typeof a.toString()); Цитата:
UPD: или ты думаешь, что в коде a.toString().replace('1', '2') ты не используешь методы объекта String? |
Я имею ввиду зачем превращать? Ведь и так работает. То есть если мы превратили то сможем использовать свойства и методы String?
|
| Часовой пояс GMT +3, время: 11:56. |