Добавление чисел в объект не работает должным образом в JS

Я создал объект со значениями Int и некоторыми функциями в js, как показано ниже.

var obj = function (int1,int2,int3){
  this.int1=int1;
this.int2=int2;
this.int3=int3;
this.add= (function (){
return parseInt(int1)+parseInt(int2)+parseInt(int3)
}());

Когда я выполняю код

var a= new obj(1,2,3);
console.log(a.add);

Ответ

NaN

Тип всех int1,int2.int3,add — число. В чем проблема с моим кодом и как ее исправить


person Avinash    schedule 23.08.2016    source источник
comment
Предназначено ли отсутствие скобок в console.log(a.add) (console.log(a.add)())? Кроме того, отсутствует закрывающая скобка для функции.   -  person Adrian Jałoszewski    schedule 23.08.2016


Ответы (4)


Вам нужен экземпляр функции с new. оператор, и вы можете пропустить parseInt, который лучше работает с данной базой.

var Obj = function (int1, int2, int3) {
        this.int1 = int1;
        this.int2 = int2;
        this.int3 = int3;
        this.add = function () {
            return this.int1 + this.int2 + this.int3;
        }
    },
    instance = new Obj(1, 2, 3);

console.log(instance.add());

person Nina Scholz    schedule 23.08.2016
comment
Вам не нужно использовать this, так как переменные в функции add имеют замыкание на переменные в контексте выполнения конструктора, создавшего экземпляр. Пока ОП не сделает Obj.int1 = 6, конечно. ;-) - person RobG; 23.08.2016
comment
правильно, но если оп хочет общедоступных свойств, то необходимо this. - person Nina Scholz; 23.08.2016

Попробуй это:

var obj = function(int1, int2, int3) {
    this.int1 = int1;
    this.int2 = int2;
    this.int3 = int3;
    this.add = function() {
        return parseInt(int1) + parseInt(int2) + parseInt(int3)
    }};

И вызовите выше как:

var a = new obj(1, 2, 3);
console.log(a.add());
person Vivek Pratap Singh    schedule 23.08.2016
comment
Ответы только на код бесполезны, вы должны объяснить, почему у OP возникла проблема и как ее исправить, а затем показать код. Что происходит, когда OP делает a.int1 = 10; a.add() ? - person RobG; 23.08.2016

запустите этот код:

var obj = function (int1, int2, int3) {
    this.int1 = int1;
    this.int2 = int2;
    this.int3 = int3;
    this.add = (function () {
        return parseInt(int1) + parseInt(int2) + parseInt(int3)
    } ())
};

var a = new obj(1,2,3);
console.log(a.add);  // 6

ваш код потерял }

person xin yin    schedule 23.08.2016
comment
вы также можете сделать это как this.add = parseInt(int1) + parseInt(int2) + parseInt(int3); - person xin yin; 23.08.2016

Попробуйте, все работает нормально:

var obj = function (int1,int2,int3){
  this.int1=int1;
this.int2=int2;
this.int3=int3;
this.add= (function (){
return parseInt(int1)+parseInt(int2)+parseInt(int3)
}())
}

var a= new obj(1,2,3);
console.log(a.add); // 6

Рабочая скрипка:

https://jsfiddle.net/90ku8qae/

Обновление:

Вы забыли добавить закрывающую скобку для функции obj. Я только что добавил, и теперь все работает нормально.

person Rohit Jindal    schedule 23.08.2016