Вызов стандартного конструктора без "new"
Что-то меняется если вызывать стандартные конструкторы без "new"?
Например, "Object(true)" вместо "new Object(true)". |
Object без new подобен Object'у c new, но без new.)
|
Клёва :)
|
Цитата:
var foo = Object(true); alert(foo); а в этом: new отвечает за создание внутреннего метода [[Construct]] и инициализацию его аргументов function Foo() { // конструктор А this.bar = true; } var foo = new Foo; alert(foo.bar); |
Цитата:
|
monolithed
Это как бы очевидно, но конкретно для пустого объекта роли не играет. |
Цитата:
Цитата:
так да: var date = new Date; alert(date.getDate()); а вот так уже нет: var date = Date; alert(date.getDate()); а для Array, String, Number, Function, RegExp вполне: alert('foo'.match(RegExp('\\w', 'g'))); |
"new Boolean(true)" это тоже примитивный тип? Наверное, там что-то вроде того:
function Object(item) { if (item != null) { return new item.constructor(item); } /* ..... */ } UPD: хотя нет, если бы так, то alert срабатывал бы больше одного раза: function Foo() { alert('Foo'); } var foo = new Foo(); Object(foo); new Object(foo); |
кстати, Преобразование типов
|
Цитата:
var n = 5; alert('test' in Object(n));// false alert('test' in new Number(n));// false alert('test' in n.valueOf());// error alert('test' in Number(n));// error |
var obj = new Number(1); var pr1 = Number(obj); // неявный вызов valueOf var pr2 = obj.valueOf(); // явный alert([ typeof obj, // "object" typeof pr1, // "number" typeof pr2 // "number" ]); Riim, есть сомнения в существовании valueOf у объекта? :D var foo = { a: true, b: true, valueOf: function () { return this.b + this.a; } }; alert(+foo); |
Number не только вызывает valueOf, но приводит результат к числу:
var test = { valueOf: function(){ return "9.1"; } }; alert( Number(test) ); var test = { valueOf: function(){ return "NotANumber"; } }; alert( Number(test) ); |
monolithed, ну вроде что-то становится понятно, спасибо.
|
Часовой пояс GMT +3, время: 05:28. |