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);
Не пойму в чем ошибка
|
|
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;
}
Спать хочу туплю
|
|
08.08.2012, 00:04
|
Профессор
|
|
Регистрация: 11.04.2012
Сообщений: 255
|
|
Вопрос как в js вызвать саму функцию не обращаяесь к ней по имени в php есть __FUNCTION__, а здесь как? По идеи this({}, options[prop])?
|
|
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);
|
|
08.08.2012, 09:13
|
|
Профессор
|
|
Регистрация: 21.04.2012
Сообщений: 951
|
|
Антон Крамолов,
ээ, в чем вопрос? хм, extend - это функция наследования, а это что?
|
|
08.08.2012, 11:02
|
|
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,587
|
|
Сообщение от Антон Крамолов
|
Вопрос как в js вызвать саму функцию не обращаяесь к ней по имени в php есть __FUNCTION__, а здесь как? По идеи this({}, options[prop])?
|
arguments.callee
Но оно depricated, правильно именно по имени.
__________________
29375, 35
|
|
08.08.2012, 11:24
|
Профессор
|
|
Регистрация: 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
|
|
08.08.2012, 11:28
|
Профессор
|
|
Регистрация: 11.04.2012
Сообщений: 255
|
|
extend пер-ся как расширить к наследованию имеет опосредованное отношение
|
|
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;
}
|
|
08.08.2012, 11:39
|
Профессор
|
|
Регистрация: 22.07.2012
Сообщений: 164
|
|
вы привели пример, я привел решение для него, то что там будут вложенный объекты вы не писали, мысли читать не умею =-((
|
|
|
|