Вызов стандартного конструктора без "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, время: 17:13. |