Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   $.extend() зачем оно? (https://javascript.ru/forum/jquery/43273-%24-extend-zachem-ono.html)

niko42 29.11.2013 13:48

$.extend() зачем оно?
 
Здравствуйте!

Уточните, пожалуйста, в чем раздница между этим:
var options = {
   color_Even: '#ff0000', // цвет текста четных строк
   color_Odd:  '#0033ff' // цвет текста нечетных строк
   };
alert(options.color_Even)


и этим:
var options = $.extend({
   color_Even: '#ff0000', // цвет текста четных строк
   color_Odd:  '#0033ff' // цвет текста нечетных строк
   },options);
alert(options.color_Even)

ksa 29.11.2013 13:54

Цитата:

Сообщение от niko42
в чем раздница

Это смотря для чего и как ты будешь это использовать...

Для такого использования
Цитата:

Сообщение от niko42
alert(options.color_Even)

разницы нет.
Это просто вывод значения свойства некоего объекта... В обоих случаях оно равно строке
'#ff0000'

niko42 29.11.2013 13:56

Цитата:

Сообщение от ksa (Сообщение 283494)
!

Спасибо! Но меня интернесует, зачем и для чего $.extend оно нужно?

ksa 29.11.2013 13:59

Цитата:

Сообщение от niko42
зачем и для чего $.extend оно нужно?

http://jquery-docs.ru/Utilities/jQuery.extend/

niko42 29.11.2013 14:06

Цитата:

Сообщение от ksa (Сообщение 283497)

Спсибо раза 3 чиатал, не понятно.....

niko42 29.11.2013 14:13

Я так понимаю:
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar", mix : 123};
var s = jQuery.extend(settings, options);
alert(s.mix);

объединяет два объекта в один и все свойтсва двух объектов доступны в одном новом объекте

Верно ли данное суждение?

mi.rafaylik 29.11.2013 14:20

niko42,
В ООП, extend наследует свойства и методы из одного класса в другой, при этом добавляет новые необходимые свойства и методы, ради которых новый класс и создаётся.
http://javascript.ru/tutorial/object...unkciya-extend

kobezzza 29.11.2013 14:51

jQuery.extend необходимо использовать для создания примесей, т.е. создания нового (или расширение старого) объекта свойствами других объектов, частый пример: функция принимает на вход объект с различными параметрами, у части параметров есть значение по умолчанию и можно на основе двух объектов (входные параметры и по умолчанию) создать третий, в котором заданы актуальные свойства.

jQuery.extend не надо использовать для наследования свойств объектов при работе с "классами", для этого есть прототипы!

kobezzza 29.11.2013 14:56

Цитата:

Сообщение от mi.rafaylik (Сообщение 283505)
niko42,
В ООП, extend наследует свойства и методы из одного класса в другой, при этом добавляет новые необходимые свойства и методы, ради которых новый класс и создаётся.
http://javascript.ru/tutorial/object...unkciya-extend

Я думаю человек спрашивает про jQuery.extend, а не тот, что указан в статье по твоей ссылке, да и ту функцию (что в твоей ссылке) правильней назвать inherit, чтобы не было путаницы, т.к. у многих extend ассоциируется именно с примесями, а не с наследованием прототипа функцией.

ksa 29.11.2013 14:58

Цитата:

Сообщение от niko42 (Сообщение 283503)
Я так понимаю:
var settings = { validate: false, limit: 5, name: "foo" };
var options = { validate: true, name: "bar", mix : 123};
var s = jQuery.extend(settings, options);
alert(s.mix);

объединяет два объекта в один и все свойтсва двух объектов доступны в одном новом объекте

Верно ли данное суждение?

Да. :yes:

mi.rafaylik 29.11.2013 14:58

kobezzza,
Верно, это я напутал с native JS

niko42 29.11.2013 15:04

Большое Всем спасибо за пояснение!

niko42 29.11.2013 15:11

Есть еще один вопрос:) :
Суть работы скрипта, делаем запрос на сервер, получаем данные и все данные записываем в storage: {},
(function($){
    var self={
        config:		{
            //Вызов функции после того, как все объекты будут считаны из хранилища
            callback:	function(){},
            //Путь к серверному хранилищу
            path:		'storage.php'
        },
        
        current:	{
            //Вызвано впервые?
            first:		true
        },
        
        //Само хранилище данных
        storage:	{},
        
        //запуск на поулчение данных
        init:		function(objects,config){
            if(!self.current.first)return;
            self.current.first=false;
            //Уст. конфиг
            $.extend(self.config,config);
            //Обраб. объекты
            self.storage=objects;
            //Восст. объекты
            self.get();
        },
        
        //Расширяет объекты
        ext:		function(objects){
            for(var k in objects){
                if(typeof(self.storage[k])=='undefined'){
                    self.storage[k]={};
                }
                //Расширяем
                if(typeof(objects[k])=='object'){
                    $.extend(true,self.storage[k],objects[k]);
                } else {
                    self.storage[k]=objects[k];
                }
            }
        },

        //Возвращает объекты из хранилища
        get:		function(){
            $.getJSON(self.config.path,function(data){
                self.ext(data);
                self.config.callback();
            });
        }
    };
    
    $.extend({
        storage:	self.init
    });
    
})(jQuery);

var a={i:0};//предположим, что тут объекты
    $(function(){
        $.storage({obj:a},{
            callback:	function(){
                alert(a);
            }
        });
    });


Вопрос, как мне обратиться к хранилющу storage: {}, - напряму?


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