2017-11-17 11 views
0

私はJavaScriptのコードを学習しています。今はプロトタイプによる継承の実例があります。オブジェクト名を使用して、そのオブジェクトのインスタンスを作成できますか?

var human = {} 
var worker = human.create() 
var dev = worker.create() 

var adrian = dev.create("Adrian",28,20000) 

運動しの2点が次のように行く: 1)Object.create 2を取り除くために)例assignations性質を取り除くために:adrian.age = 28;

事は、私がこのような何かを達成するために持っている、です

私はすでに何らかの形で私はconstructor機能の作成について考え.create

と一緒に私のオブジェクト名を使用する方法として、「古典的モデル」が、損失のイム上でこれを行うと、作成するためにそれを使用する方法を知っていますインスタンス、b私は最初に作成されたオブジェクトを持っていないので、結果は未定義です

+0

投稿された例は機能しません。オブジェクトには「作成」プロパティがありません。 – Pointy

+0

これは当てはまりません。それは働くことができます。下の私のポストを参照してください。 @Adrian:これらのソリューションのいずれかがあなたのために機能しましたか? – androidavid

答えて

0

私はあなたの仕事が実際にはわかりません。 .create方法は、あなたがそれを利用できるようにすることができ平野オブジェクトに存在しませんがプロトタイプ

で動作するように

学習:次のようである可能性があります。

はオブジェクト自身を出力することで起動してみてください:

Object.prototype.create = function(){ 
    console.log('Hello I am the object itself', this); 
}; 

({foo: 'bar'}).create(); 

その後、あなたはこれを取ると、実際にそのコピーを作成する方法を考えることができます。例えば。

Object.prototype.create = function(){ 
    return Object.assign({}, this); // shallow copy 
}; 

const human = {name: 'Max'}; 
const worker = human.create(); 

これにより、基本的にはworkerで人間の浅いフォークを作成しました。もう少し進んでみたいと思ったら、あなたの関数をパラメータ化していくつかの引数をとり、新しく作成されたオブジェクトに多くの小道具を追加するだけです。

0

プレーンJavaScriptでは、コンストラクタを関数として記述します。だから、人間のためのコンストラクタ関数を記述するために、あなたが書くでしょう:

function human(name, age) { 
 
    this.name = name; 
 
    this.age = age; 
 
} 
 

 
const adrian = new human("Adrian", 28); 
 

 
console.log(adrian.name, adrian.age); // prints the objects properties 
 

 
console.log(JSON.stringify(adrian)); // prints the created object as json string
ここ

0

はあなたが理解する例である(多分それは便利です):

function Human() { 
    this.showName = function() { 
    console.log(this.name); 
    } 
} 

var human = new Human(); 

function Worker() { 
    this.showAge = function() { 
    console.log(this.age); 
    } 
} 

Worker.prototype = human; 
var worker = new Worker(); 


function Dev(name, age, year) { 
    this.name = name; 
    this.age = age; 
    this.year = year; 

    this.showYear = function() { 
    console.log(this.year); 
    } 
} 
Dev.prototype = worker; 

var adrian = new Dev('Adrian', 28, 2000); 

adrian.showAge(); // 28 
adrian.showName(); // 'Adrian' 
adrian.showYear(); // 2000 

あなたが作成することができますコンストラクタを呼び出すことによってオブジェクトのインスタンスコンストラクタは単純な関数(HumanWorkerDev)です。

作成するすべてのオブジェクト(コンストラクタを呼び出すかどうか)には、prototypeという特別なプロパティがあります。コンストラクタのprototypeプロパティを設定することで明示的に設定でき、継承元のオブジェクトです。 JavaScriptオブジェクトでは、他のオブジェクトから継承します。この例では

adrianのプロトタイプはworkerです。

このプロセスは連鎖できるので、workerのプロトタイプはhumanです。

+0

はい、これは私が実際に始めた方法です。私の "クラス"となる関数を作り、各 "サブクラス"にプロトタイプを割り当てます。しかし、私はプロトタイプモデルの継承に移りました。私はこの時点まで来ました。たぶん、練習のポイントはちょうど十分ではなかったか、または間違っています。 – Adrian

関連する問題