Вопрос об объектном методе в JavaScript - PullRequest
4 голосов
/ 15 декабря 2008

Это дополнительный вопрос к этому .

Взгляните на эти два примера:

var number1 = new Number(3.123);
number1 = number1.toFixed(2); 
alert(number1);

var number2 = 3.123;
number2 = number2.toFixed(2);
alert(number2);

Я понимаю, что они оба имеют одинаковое значение, но правильно ли думать о методе примитивного значения? (Другими словами, 3.123.method в отличие от object.method?)

Ответы [ 3 ]

7 голосов
/ 15 декабря 2008

Технически, нет. Вы можете рассматривать его как метод начального значения, поскольку число2 будет преобразовано в объект Number, а затем для этого объекта будет вызван toFixed.

То же самое происходит, когда вы вызываете методы для строк.

Чтобы проиллюстрировать, что происходит, вы можете запустить этот код:

Object.prototype.type = function() { return typeof this; }

var string = "a string";
var number = 42;

alert(typeof string); // string
alert(string.type()); // object

alert(typeof number); // number
alert(number.type()); // object
3 голосов
/ 15 декабря 2008

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

Object.prototype.getPrototype = function() { return "Object"; };
Number.prototype.getPrototype = function() { return "Number"; };

function test(v) {
    alert("proto: " + v.getPrototype()
        + ", type: " + typeof v
        + ", is a Number: " + (v instanceof Number)
        + ", is an Object: " + (v instanceof Object));
}

// proto: Number, type: number, is a Number: false, is an Object: false
test(42);

// proto: Number, type: number, is a Number: false, is an Object: false
test(Number(42));

// proto: Number, type: object, is a Number: true, is an Object: true
test(Object(42));

// proto: Number, type: object, is a Number: true, is an Object: true
test(new Number(42));
3 голосов
/ 15 декабря 2008

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

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