проблема с JavaScript - PullRequest
       13

проблема с JavaScript

0 голосов
/ 29 ноября 2010

Я немного запутался.я хочу создать объект javascript, например:

function myObject(){
this.keyOne=1;
this.keyTwo=2;
this.keyThree=3;

function add(){
return this.keyOne+this.keyTwo+this.keyThree;
}

return{
    add: add
}

}

, поэтому создание этого объекта с помощью

var newObject = new myObject();

работает нормально, и все атрибуты верны.но с

var result = newObject.add;

все ключи неожиданно не определены!Я не имею понятия почему?: /

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

Там в настоящее время нет смысла для ключевого слова public в стандартном JavaScript.

Основываясь на исходном фрагменте кода, я подозреваю, что вы имели в виду:

function myObject(){
    this.keyOne=1;
    this.keyTwo=2;
    this.keyThree=3;

    function add(){
        return this.keyOne+this.keyTwo+this.keyThree;
    }

    return {
        add: add
    };
}

Затем функция вернетобъект, который имеет только одно свойство: функция add.Этот объект создается литералом объекта после ключевого слова return.

Но тогда нет смысла использовать this.Вы могли бы написать:

function myObject() {

    var keyOne=1;
    var keyTwo=2;
    var keyThree=3;

    function add() {
        return keyOne + keyTwo + keyThree;
    }

    return {
        add: add
    };
}

Или даже более кратко:

function myObject() {

    var keyOne=1;
    var keyTwo=2;
    var keyThree=3;

    return {
        add: function() {
            return keyOne + keyTwo + keyThree;
        }
    };
}

Это дает дополнительное преимущество: вам не нужно называть его префиксом new.Это просто обычная функция, которая создает и возвращает объект, который содержит другую функцию:

var o = myObject();
alert(o.add());

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

function myObject(keyOne, keyTwo, keyThree) {

    return {
        add: function() {
            return keyOne + keyTwo + keyThree;
        }
    };
}

var o = myObject(5, 4, 7);
alert(o.add());
3 голосов
/ 29 ноября 2010

Вы не определяете add() таким способом, которым вы подвергаетесь, вы можете сделать это, например:

function myObject(){
    this.keyOne=1;
    this.keyTwo=2;
    this.keyThree=3;

    this.add = function(){
      return this.keyOne+this.keyTwo+this.keyThree;
    }
}
var newObject = new myObject();
var result = newObject.add();

Вы можете проверить это здесь .

Также обратите внимание, что вам нужно вызвать add() с круглыми скобками, так как это функция, иначе вы получите саму функцию, а не результат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...