Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Javascript: вопросы по "основам" языка (https://javascript.ru/forum/misc/29722-javascript-voprosy-po-osnovam-yazyka.html)

almac 08.07.2012 20:41

Javascript: вопросы по "основам" языка
 
1. Как получить прототип прототипа?
function F() {}
F.prototype.__proto__ //это мы знаем, но интересует кроссбраузерное решение


2. Что это за интересная конструкция и какие еще есть "фишки" в Javascript?
Object({name: 'test'}); //создаст объект
Object(1.25); // создаст объект Number


3. Почему объект можно создать без скобок (бывает, что нет надобности передавать параметры конструктору, и можно использовать такое выражение):
function F() {}
var o = new F; //  Это кроссбраузерно и является спецификацией языка????

Drimogemon 08.07.2012 23:36

Цитата:

Сообщение от almac
Как получить прототип прототипа?

Object.getPrototypeOf(Object.getPrototypeOf( obj ))

в старые времена когда не было getPrototypeOf делали так
obj.constructor.prototype.constructor.prototype


Цитата:

Сообщение от almac
Что это за интересная конструкция и какие еще есть "фишки" в Javascript?

Number(11) тоже создает оебькт. конструкторы создают обьекты.

Цитата:

Сообщение от almac
Почему объект можно создать без скобок

потому что так захотели создатели языка,

функция вызывается по особому с помощью оператора new и скобки ему не обязательны.
это кросс.

almac 09.07.2012 00:08

Цитата:

Сообщение от Drimogemon
в старые времена когда не было getPrototypeOf делали так
obj.constructor.prototype.constructor.prototype

Смотрите какая интересная штука получается:
function F() {}
var f = new F;
f.constructor.prototype.constructor.prototype === f.constructor.prototype // true, то есть похоже никак нельзя в ECMA-262 3ей версии получить прототип прототипа кроссбраузерно (getPrototypeOf вроде не поддерживается в IE6-7


typeof Number(11) //"number", но не объект; может использоваться для перевода других типов в строку, а вот new Number(11) - это уже объект

Drimogemon 09.07.2012 01:05

almac,
ой, я ошибся, я подумал что в пртотипе свойство constructor не найдется и покажется свойство constructor в Object.prototype , запутался, да ты прав, старый javascript говно)

Цитата:

Сообщение от almac
getPrototypeOf вроде не поддерживается в IE6-7

IE6 7 8 поддерживают люди которые застрали в каменном веке

я  это имел ввиду
alert( typeof new Number(11) )

alert( typeof Number(11) )


это конструктор, но если использовать его не как конструктор а как просто функцию передав в него что-то, то он просто законвертит это в число

Dim@ 09.07.2012 13:35

Цитата:

typeof Number(11) //"number", но не объект; может использоваться для перевода других типов в строку, а вот new Number(11) - это уже объект

Цитата:

может использоваться для перевода других типов в строку
в JavaScript используются объекты обертки и им обратные, поэтому особого отличия i = 5; и i = new Number(5); нету (разве что new Number можно использовать для динамической переменной (значение которой изначально не определенно) когда к примеру prompt-ом вводят):
var i = new Number(1);
var k = 1;
alert(typeof i);//object
alert(typeof k);//number
alert(i.toString(10));//'1' работают методы одинаково
alert(k.toString(10));//'1'
i += '';
k += '';
alert(typeof i);//string и приводятся тоже одинаково 
alert(typeof k);//string

vasa_c 09.07.2012 15:09

Цитата:

Сообщение от almac
Смотрите какая интересная штука получается:
function F() {}
var f = new F;
f.constructor.prototype.constructor.prototype === f.constructor.prototype // true, то есть похоже никак нельзя в ECMA-262 3ей версии получить прототип прототипа кроссбраузерно (getPrototypeOf вроде не поддерживается в IE6-7


var fConstructor = f.constructor;
var fProto = fConstructor.prototype;
delete fProto.constructor;
var fProtoProto = fProto.constructor.prototype;

fProto.constructor = fConstructor; // возвращаем конструктор на место

Работает в случае, если цепочка constructor.prototype изначально не была порушена.


Часовой пояс GMT +3, время: 07:44.