2013-08-19 2 views
1

Я пытаюсь сделать простой объект JavaScript, которые имеют три поляобъекта доступа в JavaScript внутри decleration

  1. Имя
  2. Fname
  3. ПолноеИмя

Что я сделал это

var xyz = { 
      name: 'ahsan', 
      fname: 'ashfaq', 
      fullname : xyz.name + xyz.fname 

     }; 

но его n от работы.

+0

Если вы не заботитесь о старых IE, вы может использовать 'Object.defineProperty (xyz," fullname ", {get: function() {return this.name + this.fname;}})' https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty –

ответ

5

Вы не можете ссылаться на коврик под ногами во время создания встроенного объекта. Если вы действительно хотите, свойство, которое демонстрирует такое поведение, а затем создать класс или сделать задание в отдельном заявлении:

var xyz = { 
     name: 'ahsan', 
     fname: 'ashfaq', 
     fullname : undefined 
    }; 
xyz.fullname = xyz.name + xyz.fname; 

реализация Класс:

function XYZ(o) { 
    this.name = o.name; 
    this.fname = o.fname; 
    this.fullname = o.fname + o.name; 
} 

var xyz = new XYZ({ 
     name: 'ahsan', 
     fname: 'ashfaq' 
    }); 
1

Вместо того, чтобы полное имя поля, объявить его как метод -

var xyz = { 
    name: 'ahsan', 
    fname: 'ashfaq', 

    // Declare a method to return the full name 
    fullname : function() { 
     return this.name + this.fname; 
    } 
}; 

, а затем -

xyz.fullname(); 

даст вам полное имя.

Live Demo.

Вы не можете получить доступ к свойствам объекта в том же блоке, который его определяет. В вашем примере JavaScript будет искать определенный объект с именем xyz. Поскольку объект недоступен на данный момент, вы получите только undefined.

Сценарий изменяется при доступе к свойствам метода. Здесь вы можете использовать this для обращения к текущему объекту, который является xyz. Поэтому, когда вы вызываете этот метод, this будет ссылаться на xyz, и в этот момент его свойства будут определены.

+0

Не думаете ли вы, что было бы лучше определить, почему мы должны делать это. Я думаю, что это поможет будущим читателям. – Ancient

+0

downvote не я, сэр! , даже мне интересно – Ancient