2015-10-08 5 views
1
 var NameOne = function (firstName, lastName) { 
      this.firstName = firstName; 
      this.lastName = lastName; 
     } 
     NameOne.prototype.getName=function(){ 
      console.log(this.firstName+' '+this.lastName); 
     } 
     var name = new NameOne('Prashant','Jain'); 
     name.getName(); 

ОШИБОКНевозможно инициализировать JavaScript класса с именем ключевого слова

Uncaught TypeError: name.getName is not a function

получение выше ошибки в браузерах, если назвать объект как имя и работает на браузерах. Он отлично работает на nodejs.

ответ

3

window.name это свойство стиля геттер/сеттер в браузерах, который преобразует все в строки (быть имя из окна)

Поэтому var ИНГ это не работает, как вы ожидаете, и вы в конечном итоге с

name; // "[object Object]" 

Вам нужно будет либо

  • Выберите другой идентификатор, чтобы избежать этого конфликта
  • Работы в рамках, кроме глобального масштаба, так var будет работать для name
2

Это происходит потому, что в JavaScript имя встроенной собственности. поэтому, когда вы вызываете name.getName(), он будет фактически вызван глобальным окном, как показано ниже: window.name.getName(), который выдает ошибку. Для правильной работы вам нужно выбрать другой идентификатор, отличный от «name».

1

В браузере глобальная область действия относится к объекту window, который имеет свойство name.

Если вы читали о обзорного в JavaScript, например, в W3Schools, вы найдете эту информацию (в нижней части страницы):

Your global variables (or functions) can overwrite window variables (or functions). Any function, including the window object, can overwrite your global variables and functions.

Это означает, что, если попытаться определить любую переменную или функции, которая уже существует как член глобального объекта window, вы не сможете это сделать. Когда вы попытаетесь получить к ним доступ, вы получите доступ к глобальному объекту window.

Вы можете проверить, что после создания вашего объекта name === window.name дает значение true, а это значит, что это не ваш объект, а свойство window.name.

Вы также можете проверить, что всякий раз, когда вы создаете var в глобальной области, он создается как член окна. т.е.

var x = 22; 
window.hasOwnProperty('x'); // returns true 
console.log(window.x); // you'll see 22 in your console 

Чтобы избавиться от этой проблемы, вам необходимо свернуть вашу переменную. JavaScript только создает новые области в телах функций. Таким образом, один из способов, чтобы создать свой собственный объем его использовать «само выполнение анонимной функции» шаблон, который выглядит следующим образом:

(function(){ 
    /* new scope: variables are created here without window global object 
    * interference. You can still access globlas using window.globalName */ 
})(); 

Вы можете прочитать интересную статью по этому образцу here.

В узле.js в глобальном масштабе нет name, поэтому у вас нет этой проблемы. Существует большое объяснение того, что находится в глобальной области node.js в this great SO answer.

Смежные вопросы