Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.07.2012, 20:41
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

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


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


3. Почему объект можно создать без скобок (бывает, что нет надобности передавать параметры конструктору, и можно использовать такое выражение):
function F() {}
var o = new F; //  Это кроссбраузерно и является спецификацией языка????
Ответить с цитированием
  #2 (permalink)  
Старый 08.07.2012, 23:36
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

Сообщение от almac
Как получить прототип прототипа?
Object.getPrototypeOf(Object.getPrototypeOf( obj ))

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


Сообщение от almac
Что это за интересная конструкция и какие еще есть "фишки" в Javascript?
Number(11) тоже создает оебькт. конструкторы создают обьекты.

Сообщение от almac
Почему объект можно создать без скобок
потому что так захотели создатели языка,

функция вызывается по особому с помощью оператора new и скобки ему не обязательны.
это кросс.
Ответить с цитированием
  #3 (permalink)  
Старый 09.07.2012, 00:08
Аспирант
Отправить личное сообщение для almac Посмотреть профиль Найти все сообщения от almac
 
Регистрация: 29.06.2012
Сообщений: 31

Сообщение от 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) - это уже объект
Ответить с цитированием
  #4 (permalink)  
Старый 09.07.2012, 01:05
Аватар для Drimogemon
Профессор
Отправить личное сообщение для Drimogemon Посмотреть профиль Найти все сообщения от Drimogemon
 
Регистрация: 02.07.2012
Сообщений: 106

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

Сообщение от almac
getPrototypeOf вроде не поддерживается в IE6-7
IE6 7 8 поддерживают люди которые застрали в каменном веке

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

alert( typeof Number(11) )


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

Последний раз редактировалось Drimogemon, 09.07.2012 в 01:07.
Ответить с цитированием
  #5 (permalink)  
Старый 09.07.2012, 13:35
Аватар для Dim@
Профессор
Отправить личное сообщение для Dim@ Посмотреть профиль Найти все сообщения от Dim@
 
Регистрация: 21.04.2012
Сообщений: 951

Цитата:
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
Ответить с цитированием
  #6 (permalink)  
Старый 09.07.2012, 15:09
Аватар для vasa_c
Профессор
Отправить личное сообщение для vasa_c Посмотреть профиль Найти все сообщения от vasa_c
 
Регистрация: 12.03.2008
Сообщений: 183

Сообщение от 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 изначально не была порушена.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34
Синтаксис языка javascript multimetr Я не знаю javascript 2 26.05.2009 23:34