2017-02-02 3 views
0

は、私が人「クラス」を定義しています:OOPスタイルのJavaScriptでコンストラクタを模倣する方法は?次のようにOOPの方法で

var Person = { 
    name: '', 
    age: 32, 
    gender: 'male', 
    interests: ['music', 'skiing'], 
    bio: function() { 
    alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.'); 
    }, 
    greeting: function() { 
    alert('Hi! I\'m ' + this.name + '.'); 
    } 
}; 

、私は上記のクラスをインスタンス化しています。

var person1= Object.create(Person); 
person1.name = 'personname'; 
person1.greeting(); 

Object.create(人が)新しいオブジェクトを作成するとき、コンストラクタのコードが自動的に計算されるように、私はコンストラクタを模倣することができますどのように?

+2

あなたがすることはできません。なぜ...コンストラクタを使用しないのですか? – Ryan

+0

また、 'Person'は**オブジェクト**であり、クラスではありません。 – Rajesh

+0

タイプミスかもしれませんが、あなたの例では' animal 'は定義されていません。 – gotomanners

答えて

1

コードを関数にまとめて呼び出します。 Object.createprototypeとの関係を確立しますが、自動的に追加コードを呼び出すことはありません。

function person(name) { 
    var person1 = Object.create(Person); 
    person1.name = name; 
    return person1; 
} 

person('personname').greeting(); 

あなたはまた、彼らはnewを使用して呼び出されるべき機能でない限り、変数の最初の文字を大文字化することは避けてください。これは、コンストラクター関数にのみ使用される命名規則です。

0

var Person = function(name) { 
 
    this.name = name || ''; 
 
    this.age = 32; 
 
    this.gender = 'male'; 
 
    this.interests = ['music', 'skiing']; 
 
    
 
    this.bio = function() { 
 
    alert(this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.'); 
 
    }; 
 
    
 
    this.greeting = function() { 
 
    alert('Hi! I\'m ' + this.name + '.'); 
 
    }; 
 
}; 
 

 
var person1= new Person('personname'); 
 
person1.greeting();

+0

したがって、this.name、this.age、this.gender、this.interestsなどのすべての代入は、コンストラクタコードと同等です。それは正しい? – kofhearts

+0

@ user734861修正します。これがコンストラクターがJSでどのように定義されるかです。 ES6はより洗練されたOOP構文を持っています。 –

+1

@ user734861これはコンストラクタです – Thomas

1

あなたはnewで使用するために実際のクラスを作ることができます。

var Person = function() { 
 
    var Person = function() { 
 
     this.name = ['', '']; 
 
     this.age = 32; 
 
     this.gender = 'male'; 
 
     this.interests = ['music', 'skiing']; 
 
    }; 
 
    
 
    Person.prototype.bio = function() { 
 
     return this.name[0] + ' ' + this.name[1] + ' is ' + this.age + ' years old. He likes ' + this.interests[0] + ' and ' + this.interests[1] + '.'; 
 
    }; 
 
    Person.prototype.greeting = function() { 
 
     return 'Hi! I\'m ' + this.name + '.'; 
 
    }; 
 
    return Person; 
 
}(); 
 

 

 
var p1 = new Person; 
 

 
p1.name = ['Tom', 'Sawyer']; 
 
console.log(p1.bio()); 
 
console.log(p1);

関連する問題