JavaScript初心者は必ず「new」を見ます.
3752 ワード
訳文:https://blog.fundebug.com/2017/06/02/javascript-new-for-beginner/
訳者は: この記事は簡単に紹介したnewです.プロトタイプを紹介します.読む価値があります.
原文: JavaScript For Beginner:the'new'operator
翻訳者: Fundebug
可読性を保証するために、本文は直訳ではなく意訳を採用する.また、この著作権は元の作者に帰属し、翻訳は学習にのみ使用されます.
新しい空のオブジェクトを作成します.
function Student(name,age){
this.name=name;
this.age=age;
)
var first=
new Student(
ジョンさん、
26)
いったい何があったのですか?
新しいオブジェクトを作成し、
consolone.log(first.name);
//ジョン
consolie.logs(first.age)
//26
次に、
プロトタイプ(Prottotype)
どのJavaScriptオブジェクトにも原型があります.すべてのオブジェクトはその原型からオブジェクトと属性を継承します.
ブラウザ開発者コントロールパネル(Windows:Ctrl+Shift+J)(Mac:Cmd+Option+J)を開き、以前に定義された
function Student(name,age){
this.name=name;
this.age=age;
)
各オブジェクトにプロトタイプがあることを確認するために、入力:
Student.prototype
//Object{…}
戻ってきた相手が見えます.新しいオブジェクトの定義を試みます.
var second=
new Student(
'Jeff'は、
50)
以前の説明によれば、
second.__proto_==Student.prototype
//true
Student.prototype.com nstructor;
//function Student(name,age){
//this.name=name;
//this.age=age
//}
事情はますます複雑になっているようです.私達は図でイメージして説明します.
このデザインは継承にとって重要です.プロトタイプオブジェクトはこのコンストラクタによって作成されたすべてのオブジェクトによって共有されるからです.モデルオブジェクトに関数と属性を追加すると、他のすべてのオブジェクトが使用できます.
本論文では2つの
例を見てみます.
Student.prototype.sayInfo=
function(){
consolie.log(
this.name+
'is'+
this.age+
'years old')
)
second.sayInfo()
//Jeff is 50 years old
新しい学生オブジェクトを作成し、再度テストします.
var third=
new Student(
'Tracy'
15)
//もし今プリントしたら、年齢と名前の二つの属性しか見えませんが、
//まだsayInfo関数にアクセスできます.
サード
//Student{name:「Tracy」、age:15}
third.sayInfo()
//Tracy is 15 years old
JavaScriptでは、まず現在のオブジェクトがこの属性を持っているかどうかを確認します.もしないなら、原型の中にこの属性があるかどうかを見ます.この規則は、属性を見つけることに成功するまで、または最上位のグローバルオブジェクトが見つからずに失敗します.
これを引き継ぎます.普段は
var name={
toString:
function(){
consolie.log(
'Not a good idea');
)
}
name.toString()
//Not a good idea
作成された
締め括りをつける
これらの概念はあなたにとってちょっと多いかもしれませんが、原型を使うともっと効率的なコードが書けるようになります.
訳者は: この記事は簡単に紹介したnewです.プロトタイプを紹介します.読む価値があります.
原文: JavaScript For Beginner:the'new'operator
翻訳者: Fundebug
可読性を保証するために、本文は直訳ではなく意訳を採用する.また、この著作権は元の作者に帰属し、翻訳は学習にのみ使用されます.
new
を使うと、新しい空のオブジェクトを作成します.
this
をオブジェクトにバインドする.__proto__
という新しい属性を追加し、構造関数のプロトタイプを指します.this
オブジェクトを返します.あなたが特に理解していないなら、次に例を使って詳しく説明します.まず、2つのパラメータStudent
とname
を受信する構造関数age
を定義する.function Student(name,age){
this.name=name;
this.age=age;
)
new
を使って新しいオブジェクトを作成します.var first=
new Student(
ジョンさん、
26)
いったい何があったのですか?
新しいオブジェクトを作成し、
obj
と呼びます.this
はobj
に結合されており、this
のいずれかの対の参照はobj
の参照である.__proto__
属性はobj
オブジェクトに追加される.obj.__proto__
はStudent.prototype
を指す.obj
オブジェクトはfirst
変数に割り当てられる.私たちはプリントテストに合格できます.consolone.log(first.name);
//ジョン
consolie.logs(first.age)
//26
次に、
__proto__
がどういうことかを深く見てみます.プロトタイプ(Prottotype)
どのJavaScriptオブジェクトにも原型があります.すべてのオブジェクトはその原型からオブジェクトと属性を継承します.
ブラウザ開発者コントロールパネル(Windows:Ctrl+Shift+J)(Mac:Cmd+Option+J)を開き、以前に定義された
Student
関数を入力します.function Student(name,age){
this.name=name;
this.age=age;
)
各オブジェクトにプロトタイプがあることを確認するために、入力:
Student.prototype
//Object{…}
戻ってきた相手が見えます.新しいオブジェクトの定義を試みます.
var second=
new Student(
'Jeff'は、
50)
以前の説明によれば、
second
が指すオブジェクトには__proto__
属性があり、父を指すべきprototype
があります.second.__proto_==Student.prototype
//true
Student.prototype.constructor
はStudent
の構造関数を指します.印刷してみます.Student.prototype.com nstructor;
//function Student(name,age){
//this.name=name;
//this.age=age
//}
事情はますます複雑になっているようです.私達は図でイメージして説明します.
Student
のコンストラクタには.prototype
という属性があり、また.constructor
の属性が逆にStudent
に向けられて構成されている.それらはリングを構成しています.new
を使用して新しいオブジェクトを作成すると、各オブジェクトは.__proto__
属性を逆にStudent.prototype
に向ける.このデザインは継承にとって重要です.プロトタイプオブジェクトはこのコンストラクタによって作成されたすべてのオブジェクトによって共有されるからです.モデルオブジェクトに関数と属性を追加すると、他のすべてのオブジェクトが使用できます.
本論文では2つの
Student
オブジェクトしか作成していません.もし私たちが20,000個を作成したら、各オブジェクトの代わりに属性と関数をprototype
に置くと、非常に多くの記憶と計算リソースが節約されます.例を見てみます.
Student.prototype.sayInfo=
function(){
consolie.log(
this.name+
'is'+
this.age+
'years old')
)
Student
のプロトタイプに新しい関数を追加しました. – したがって、sayInfo
を使用して作成された学生オブジェクトは、この関数にアクセスすることができます.second.sayInfo()
//Jeff is 50 years old
新しい学生オブジェクトを作成し、再度テストします.
var third=
new Student(
'Tracy'
15)
//もし今プリントしたら、年齢と名前の二つの属性しか見えませんが、
//まだsayInfo関数にアクセスできます.
サード
//Student{name:「Tracy」、age:15}
third.sayInfo()
//Tracy is 15 years old
JavaScriptでは、まず現在のオブジェクトがこの属性を持っているかどうかを確認します.もしないなら、原型の中にこの属性があるかどうかを見ます.この規則は、属性を見つけることに成功するまで、または最上位のグローバルオブジェクトが見つからずに失敗します.
これを引き継ぎます.普段は
Student
関数を定義する必要がなく、直接使用できます.toString()
はこの関数がtoString()
のプロトタイプに内蔵されているからです.各オブジェクトは最終的にObject
を指すので、Object.prototype
を呼び出すことができます.もちろん、この関数を書き換えることもできます.var name={
toString:
function(){
consolie.log(
'Not a good idea');
)
}
name.toString()
//Not a good idea
作成された
toString()
オブジェクトは、まずname
があるかどうかを確認し、ある場合はプロトタイプ内で検索しない.締め括りをつける
これらの概念はあなたにとってちょっと多いかもしれませんが、原型を使うともっと効率的なコードが書けるようになります.