функции - это обьекты
В javascript на сколько я понял все переменные могут быть либо примитивами, либо объектами. А функции это тоже объекты у которых скрытое свойство отвечающее за тип объекта условно равно = "функция", и есть еще скрытые методы типа "call".
Недавно я перешел с "var x={}" на "var x = Object.create(null)" в связи с тем что с независимым(чистым) объектом проще работать. Теперь же я заметил что после var f = new Function(paramVariable,bodyVariable)объект f, хоть он и 'функция' все равно обладает своством 'prototype' и другими. Как думаете можно ли объект var x = Object.create(null)превратить в функцию ? (очень сомнительно); Или есть способ от функции отрезать ее родителей? p.s. неспрашивайтезачеммнеэтоя самнезнаю |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
var func = new Object(null); var realFunc = function(){console.log("Hello!")}; func.apply = realFunc.apply; func.apply(10); //Exception: TypeError: Function.prototype.apply called on incompatible Object Как? |
Цитата:
функция где-то внутри содержит некоторый набор действий, объект такого набора не содержит. Как здесь уже предлагается, можно добавить методы call и apply но им ведь нужна некая функция, чтобы её вызывать. Сам объект они вызвать не смогут. Смогут, например, некую функцию в составе объекта, но это не "превращение", а скорее обертка. |
и разумеется, никак нельзя сделать, чтобы вызывать х()
|
Цитата:
Вот только задача ТС не выполнена - func.apply точно так же наследует от Function и имеет все его свойства. |
Цитата:
function hello() { console.log("Hello, world!"); } hello.__proto__ = null; Но нахера? Зачем ты борешься с языком? :blink: |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Не стоит равняться на идиотов. Серьезно, никто так не делает) Хочешь перестраховаться - просто не используй непопулярные либы; скажем, у которых меньше ста звезд на гитхабе. Цитата:
Возможно, ты незнаком с замыканиями и пытаешься использовать new Function на их месте. Не надо так. Изучи замыкания, это мощь JS. Цитата:
|
Часовой пояс GMT +3, время: 07:04. |