2013-08-07 3 views
0

Я довольно новичок в JavaScript, и я изучаю учебные пособия, чтобы ознакомиться. Я получаю 12 для имени, но мне кажется, что это должно быть имя по умолчанию (так как оно никогда не обновлялось). Это довольно простой, но я не могу найти ошибку. Кроме того, я уверен, что я неправильно использую функцию в требовании, но я точно не знал, как это сделать.JavaScript: Неожиданный результат наследования

Следует отметить, что Person.js находится на сервере, а PersonEmployee.html является локальным.

PersonEmployee.html:

<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
     <meta http-equiv="X-UA-Compatible" content="IE=7" /> 
     <title>Dojo Check</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/dojo/1.9.0/dojo/dojo.js"></script> 
    <script> 

    require(["http://www.pcs.cnu.edu/~wtaylor/Sandbox/Inheritance2/Person.js"], function(){ 
      var aPerson = new Person("Tommy", 12, "Da Hood"); 
     var emp = new Employee(12); 
     alert(emp.name); 
    }); 
     </script> 
    </head> 
    <body> 
    </body> 
</html> 

Person.js:

dojo.declare("Person", null,{ 
    name: "John Doe", 
    age: 0, 
    address: "", 
    constructor: function(name, age, address) { 
     this.name = name; 
    this.age = age; 
    this.address = address; 
    } 
}); 

dojo.declare("Employee", Person, { 
    id : 0, 
    constructor: function(id) { 
     this.id = id; 
    } 
}); 
+0

Не могли бы вы выслать код для сотрудника – legrandviking

+0

Упс! Просто увидел, что я этого не сделал - обновлено :) –

+0

Какие учебники вы читаете? У вас действительно веселое сочетание старого и нового кода. –

ответ

1

Хорошая практика для конструкторов, чтобы избежать изменения своих аргументов. Это гарантирует, что другие классы могут получить доступ к исходным значениям, и позволяют играть приятно, когда класс используется как строительный блок для других классов.

http://dojotoolkit.org/reference-guide/1.9/dojo/_base/declare.html#default-constructor-chaining

Оба конструкторы называют только с одним параметром (12). Когда человек вызывается, в качестве параметра имени передается значение 12.


ответ на комментарий

Вместо того чтобы передавать список аргументов, передать один объект аргумент и в конструктор самого верхнего объекта подмешать объект параметра:

var Person = dojo.declare("Person", null,{  
    constructor: function(params) { 
     if(params) 
      dojo.mixin(this, params); 
    } 
}); 

var Employee = dojo.declare("Employee", Person, { 
    id : 0 
}); 

var emp = new Employee({ 
    id: 12 
}); 

http://dojotoolkit.org/reference-guide/1.9/dojo/_base/lang.html#dojo-base-lang-mixin

+0

Я очень объектно-ориентированный человек (был большой на Java). Меня больше интересовал отдельный класс .js, который определил Emp/Person, и с вызовом .html. Есть ли способ сделать это (как и то, что я изначально имел, но через цепочку в отдельном файле .js). –

+0

Обновлен мой ответ, чтобы привести пример –

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