0

Я хочу, чтобы все мои функции принимали один параметр объекта, поэтому я могу передать ему список именованных аргументов, не зависящих от порядка.Проверка параметров объекта функции javascript

, например:

function A(param){ 

    this.first = param.first ? param.first : null; 
    this.second = param.second ? param.second : null; 

} 

Так что я могу сделать объект, передавая что-либо, и если объект не имеет первую или вторую собственность, то объект до сих пор получает сделанный со всеми его свойствами установлено null или другое значение по умолчанию.

Если я хочу создать объект по умолчанию, я хотел бы просто вызвать новый A() без какого-либо объекта параметра, но затем он выдает ошибку, потому что я пытаюсь незаконно получить доступ к свойству «undefined», так что конструктор ничего не делает.

Я мог бы сделать это следующим образом:

function A(param){ 

    if(typeof param ==== 'undefined')param = {}; 
    this.first = param.first ? param.first : null; 
    this.second = param.second ? param.second : null; 

} 

Но если я хочу, чтобы все мои функции принимают один объект пар, мне нужно будет включить эту строку в каждом определении функции.

Есть ли лучший способ достичь этого результата или если вы не работаете с прототипом функции, чтобы все функции автоматически получали эту проверку, чтобы убедиться, что параметр присутствует или хотя бы инициализирован, поэтому код не падает при попытке доступа к свойствам «undefined».

Спасибо.

ответ

1

Вы можете использовать || оператор:

function A(param){ 
    param == param || {}; 
    this.first = param.first || null; 
    this.second = param.second || null; 
} 
+0

Я думаю, вы неверно истолковали вопрос ОП. –

+0

@AaditMShah: Почему вы так думаете? – Guffa

+0

Нет причин. Наверное, я ошибся. Сожалею. –

1

Просто создать функцию-оболочку следующим образом:

function wrap(funct) { 
    return function (args) { 
     if (typeof args == "undefined") args = {}; 
     funct.apply(this, args); 
    }; 
} 

Теперь вы можете создать столько конструкторов, как вам нравится следующим образом:

var A = wrap(function (args) { 
    this.first = args.first || null; 
    this.second = args.second || null; 
}); 

var B = wrap(function (args) { 
    this.first = args.first || null; 
    this.second = args.second || null; 
}); 

Затем просто инициализируйте конструкторы:

var a = new A; 
var b = new B({ 
    first: 2 
}); 

alert(a.first); // null 
alert(a.second); // null 
alert(b.first); // 2 
alert(b.second); // null 

Cheers. =)