0

クラスjordanのプロパティがないのはなぜですか? すべてのクラスがクラスのすべてのプロパティを継承するHumanと言うCoder.prototype = new Human;だけで十分ではないでしょうか?CoderHuman

関数を割り当てとして定義することと関係がありますか?

var Human = function() {
     var hi = function() {
         alert('hi');
      };
     return {
        name : 'dan',
       sayHi : hi
     };
};

var dan = new Human();

var Coder = function() {
   var code = function() {
      alert('1010101');
   };    
  return {
    code : code
  };
};

Coder.prototype = new Human;
Coder.prototype.constructor = new Coder;
var jordan = new Coder();
console.log(jordan);
4

2 に答える 2

2

コンストラクターは、作成しているオブジェクトを返さないため、継承は機能しません。代わりにこれを使用してください:

var Human = function() {
     this.sayHi = function() {
         alert('hi');
     };
     this.name = 'dan';
};

var dan = new Human();

var Coder = function() {
   this.code = function() {
      alert('1010101');
   };    
};

Coder.prototype = new Human;
Coder.prototype.constructor = Coder;
var jordan = new Coder();
console.log(jordan);

別のオプションとして、ものをHumanプロトタイプに移動します。

var Human = function() {};
Human.prototype.sayHi = function() {
    alert('hi');
};
Human.prototype.name = 'dan'; // will be shadowed if redefined on instances

var Coder = function() {};
Coder.prototype = Object.create(Human.prototype);
Coder.prototype.code = function() {
    alert('1010101');
};  
var jordan = new Coder();
console.log(jordan);

のポリフィルObject.createMDN で利用可能です

于 2013-10-04T19:26:23.403 に答える