Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.08.2012, 23:54
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Функция extend
function extend() {
    var target = arguments[0];
    alert(arguments.length);
    
    for (var i = 1; i < arguments.length; ++i) {
        var options = arguments[i];
        
        for (var prop in options) {
            alert(prop + ' ' + options[prop]);
            
            if (typeof arguments[i] == 'object') {
               target[prop] = extend({}, options[prop]);
            }
            else {
                target[prop] = options[prop];
            }
        }
    }
    
    return target;
}

var defaults = {width: 'auto', height: 'auto'};
var options = {width: '1000px'};
var c = extend({}, defaults, options);
alert(c.height);


Не пойму в чем ошибка
Ответить с цитированием
  #2 (permalink)  
Старый 08.08.2012, 00:00
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

function extend() {
    var target = arguments[0];
    
    for (var i = 1; i < arguments.length; ++i) {
        var options = arguments[i];
        
        for (var prop in options) {          
            if (typeof options[prop] == 'object') {
               target[prop] = extend({}, options[prop]);
            }
            else {
                target[prop] = options[prop];
            }
        }
    }
    
    return target;
}


Спать хочу туплю
Ответить с цитированием
  #3 (permalink)  
Старый 08.08.2012, 00:04
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Вопрос как в js вызвать саму функцию не обращаяесь к ней по имени в php есть __FUNCTION__, а здесь как? По идеи this({}, options[prop])?
Ответить с цитированием
  #4 (permalink)  
Старый 08.08.2012, 00:09
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

function extend() {
    var target = arguments[0];
    
    for (var i = 1; i < arguments.length; ++i) {
        var options = arguments[i];
        
        for (var prop in options) {          
            if (typeof options[prop] == 'object') {
               target[prop] = extend({}, options[prop]);
            }
            else {
                target[prop] = options[prop];
            }
        }
    }
    
    return target;
}

var a = {x: 'X', y: {yx: 'XX', yy: 'YY'}};
var b = {z: 'Z'};
var c = extend({}, a, b);
a.y.yx = 'TEST';
alert(c.y.yx);
Ответить с цитированием
  #5 (permalink)  
Старый 08.08.2012, 09:13
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Антон Крамолов,
ээ, в чем вопрос? хм, extend - это функция наследования, а это что?
Ответить с цитированием
  #6 (permalink)  
Старый 08.08.2012, 11:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Сообщение от Антон Крамолов Посмотреть сообщение
Вопрос как в js вызвать саму функцию не обращаяесь к ней по имени в php есть __FUNCTION__, а здесь как? По идеи this({}, options[prop])?
arguments.callee
Но оно depricated, правильно именно по имени.
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 08.08.2012, 11:24
Профессор
Отправить личное сообщение для Dmitriyff Посмотреть профиль Найти все сообщения от Dmitriyff
 
Регистрация: 22.07.2012
Сообщений: 164

function extend() {
    var options, name,
    	target = arguments[0] || {},
    	i = 1
    	length = arguments.length;

    for ( ; i < length; i++) {
    	if ( (options = arguments[i]) != null) {
    		for (var name in options) {
    			target[name] = options[name]
    		}
    	}
    }

    return target;
}

var defaults = {width: 'auto', height: 'auto'};
var options = {width: '1000px'};
var c = extend({}, defaults, options);
console.log(c); // {width: '1000px', 'height': 'auto'}

самый простой вариант
посмотрите реализацию у jQuery
Ответить с цитированием
  #8 (permalink)  
Старый 08.08.2012, 11:28
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

extend пер-ся как расширить к наследованию имеет опосредованное отношение
Ответить с цитированием
  #9 (permalink)  
Старый 08.08.2012, 11:32
Профессор
Посмотреть профиль Найти все сообщения от Антон Крамолов
 
Регистрация: 11.04.2012
Сообщений: 255

Сообщение от Dmitriyff Посмотреть сообщение
function extend() {
    var options, name,
    	target = arguments[0] || {},
    	i = 1
    	length = arguments.length;

    for ( ; i < length; i++) {
    	if ( (options = arguments[i]) != null) {
    		for (var name in options) {
    			target[name] = options[name]
    		}
    	}
    }

    return target;
}

var defaults = {width: 'auto', height: 'auto'};
var options = {width: '1000px'};
var c = extend({}, defaults, options);
console.log(c); // {width: '1000px', 'height': 'auto'}

самый простой вариант
посмотрите реализацию у jQuery
Это плохой пример, если массив, содержит вложенные массивы то при модификации исходного массива будет модифицирована и копия

function extend() {
    var target = arguments[0];
    
    for (var i = 1; i < arguments.length; ++i) {
        var options = arguments[i];
        
        for (var prop in options) {          
            target[prop] = (typeof options[prop] == 'object') ? extend({}, options[prop]) : options[prop];
        }
    }
    
    return target;
}
Ответить с цитированием
  #10 (permalink)  
Старый 08.08.2012, 11:39
Профессор
Отправить личное сообщение для Dmitriyff Посмотреть профиль Найти все сообщения от Dmitriyff
 
Регистрация: 22.07.2012
Сообщений: 164

вы привели пример, я привел решение для него, то что там будут вложенный объекты вы не писали, мысли читать не умею =-((
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция и несуществующий id Ankh Элементы интерфейса 4 10.02.2012 23:49
функция не успевает Sadist_dead Элементы интерфейса 22 02.10.2011 19:00
jQuery - объект или функция? jazzz13 jQuery 8 16.08.2011 04:01
Функция сохранения документа LRCenter Общие вопросы Javascript 11 27.04.2011 23:03
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47