2017-01-11 3 views
0

Я недавно узнал, что мы не можем напрямую получить доступ к inner function. Нам нужно сделать объект функции для этого. Однако он выглядит по-другому для меня в функции Date, так как мы можем получить доступ к внутренним функциям, например Date.now(). typeof Date"function" и не "Object".Работа с датой в Javascript

Что мне здесь не хватает?

+1

Что вы имеете в виду под "внутренней функции"? – Dai

+3

«Методы» отличаются от «внутренних функций». По определению методы отображаются на объекте, на котором они определены. –

+0

благодарит @torazaburo за отличный комментарий. Я предполагаю, что вся моя путаница между методами и внутренними функциями. – SKG

ответ

5

Вы можете сделать такое. Здесь b функция является функцией A. Тип A вернет function. Но в Javascript функции также являются объектами. Таким образом, вы можете добавить properties и functions (methods) в function object itself.

function A(){ 
 
    
 
} 
 

 
A.b = function(){ 
 
    console.log('B'); 
 
} 
 

 
A.b();

Но если вы имеете в виду внутреннюю функцию этой

function A(){ 
 
    
 
    function b(){ 
 
    console.log('b') ; 
 
    } 
 
    
 
}

Вы не можете получить доступ к внутренней b функции вне A.

Один случай, чтобы получить доступ к внутренней функции вне A, необходимо назначить функцию к this, которая называется method, а затем создать объект A и использовать его method.

function A(){ 
 
     
 
    this.b = function(){ 
 
    console.log('b'); 
 
    }; 
 
     
 
} 
 

 
let a = new A(); 
 
a.b();

+0

Спасибо за такой быстрый ответ. Не могли бы вы рассказать о различии между первым и вторым способом. Мне оба выглядят одинаково. – SKG

+0

@SKG в первом случае я назначаю функцию свойству '' '' '' '. Это будет часть' А'. Во втором случае это только функция в области «A». Он не является частью какого-либо объекта. –

+0

«Но в функциях Javascript также есть объекты». Можете ли вы рассказать мне, как я могу найти этот объект? Имя функции печати в консоли просто дает определение функции, а не объект Function. – SKG

-1

На самом деле, Date является конструктор объекта Date, так это здравый смысл, что вы используете new Date(), чтобы получить доступ в эти «внутренние функции» вы указанных в вашем вопросе:

type of Date // function 
type of Date() // string, shorthand of new Date().toString() 
type of new Date() // object 
+0

Как может быть что-то конструктор и объект одновременно (что даже не так)?Как свойство функции имеет нечто специфическое для конструкторов (а это не так)? Что это связано с «новым»? Как это ответить на вопрос 'Date.now', который недействителен с' new'? – Xufox

+0

@Xufox Date - это не только объект, но и конструктор Date. Вы можете использовать 'new' для создания экземпляра объекта Date. Пожалуйста, прочитайте дополнительную ссылку на странице https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date. Не задавайте эти простые вопросы, которые вы можете просто использовать в Google. –

+0

Можете ли вы назвать пример функции или конструктора, который не ведет себя как объект? Что ваш ответ должен ответить на вопрос или проблемы в моем первом комментарии? Опять же, что означает «новый» для свойств функции? – Xufox

-1

Внутренняя функция в основном является функцией-конструктором.

например: function MyDate() { } MyDate.prototype.getDate = function() { console.log('getDate') } MyDate.getDate() // getDate

+0

Это не то, как работает «прототип». – Xufox