Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Наследование функционала классов атомарных типов (https://javascript.ru/forum/misc/24792-nasledovanie-funkcionala-klassov-atomarnykh-tipov.html)

FINoM 14.01.2012 08:10

Наследование функционала классов атомарных типов
 
Не могу понять, как создать конструктор, расширяющий класс для вещей атомарного типа. Например, я хочу сделать класс N, который ведет себя так же как и Number, но имеет дополнительные методы.
...
N.prototype.doSomething = function(){}; //при этом Number не трогать
var n = new N(5);
x = 3 + n; //8
n.doSomething();
Number.prototype.doSomething; //undefined

То же самое касается String и Boolean.

Nekromancer 14.01.2012 08:49

FINoM,
Создаёшь iframe, берёшь о туда нужный объект и пользуешься им, меняя прототипы.

Kolyaj 14.01.2012 10:04

function N(value) {
    this.value = value;
}

N.prototype.valueOf = function() {
    return this.value;
};
var n = new N(5);
alert(3 + n);

FINoM 14.01.2012 16:31

Kolyaj, круто.
Как теперь скопировать методы Number в N? Можно, конечно, вручную создать методы, но вопрос интересует с чисто образовательной стороны.

Kolyaj 14.01.2012 18:02

N.prototype = new Number();


Только не факт, что всё будет работать, как задумано. Скользкая это дорожка :)

FINoM 14.01.2012 18:15

Цитата:

Сообщение от Kolyaj
N.prototype = new Number();

Я тоже так пробовал, не пашет. Поэтому и спрашиваю.

Kolyaj 14.01.2012 18:24

Ничего не выйдет.
http://javascript.ru/ecma/part15#a-15.7.4
Цитата:

Если значение this не является объектом, для которого значением внутреннего свойства [[Class]] является "Number", бросается исключение TypeError.

FINoM 14.01.2012 18:33

Kolyaj, спасибо. Но текст сложновато написан.

Nekromancer 14.01.2012 18:39

FINoM,
Нормально, это спецификация.


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