2017-12-26 19 views
0

DateまたはArrayのような新しいオブジェクトをJavaScriptで作成したいと思います。これは、関数Date()のように呼び出すことができます。一方、Date.now()またはArray.of()のような他の関数もあり、このオブジェクトの新しいインスタンスを返します。JSでコンストラクタ関数を使用してオブジェクトを作成するにはどうすればよいですか?

どうすればいいですか?例えば

function Foo (lastName) { 
    this.firstName = 'Foo' 
    return this.firstName + ' ' + lastName 
} 

Foo('Bar') // 'Foo Bar' 

Foo.setFirstName = function (firstName) { 
    this.firstName = firstName 
    /** 
    * Here I want to return a new instance of Foo, with new firstName 
    */ 
} 

const foo = Foo.setFirstName('foo') 

foo('bar') // 'foo bar' 
+0

この記事をチェックしてくださいhttps://www.phpied.com/3-ways-to-define-a-javascript-class/ –

+2

[JavaScriptでカスタムオブジェクトを正しく作成する方法](https://stackoverflow.com/questions/1595611/how-to-properly-create-a-custom-object-in-javascript)の可能な複製 – Rajesh

答えて

0

function Foo (lastName) { 
 
    this.firstName = 'Foo' 
 
    return this.firstName + ' ' + lastName 
 
} 
 

 
Foo('Bar') // 'Foo Bar' 
 
console.log(Foo('Bar')) 
 

 
Foo.setFirstName = function (firstName) { 
 
return function(lastName) { 
 
    this.firstName = firstName; 
 
    return this.firstName + ' ' + lastName 
 
} 
 
} 
 

 
const foo = Foo.setFirstName('foo') 
 

 
foo('bar') // 'foo bar' 
 
console.log(foo('bar'));

+0

説明を追加してください。あなたは読者の方にお返事しています – Rajesh

+0

私は質問を更新しました。実際には、私は新しいインスタンスが同じ機能を持っているが、元の関数と異なるコンテキストを持っています。どうやってやるの? –

+0

@KarlBaoがneed.itの回答を更新しました – zabusa

0

function Foo(lastName) { 
 
    this.firstName = 'Foo' 
 
    this.lastName = lastName; 
 
    return this; 
 
} 
 

 
Foo('Bar') // {firstName:'Foo', lastName:'Bar'} 
 

 
Foo.setFirstName = function(firstName) { 
 
    let k = Object.assign({}, this); 
 
    return Object.assign(k, { 
 
    "firstName": firstName 
 
    }) 
 
} 
 

 
const foo = Foo.setFirstName('foo') //{firstName:'foo', lastName:'Bar'}

Object.assign previからプロパティを最初の引数の通り、新しいオブジェクトを作成し、追加しますousオブジェクトを使用しています。私たちは引数でプロパティをオーバーライドするためにObject.assignを2回使用します。

関連する問題