Javascriptデザインモデル学習1(ウォーミングアップ編)
3327 ワード
関数の作成から開始
関数の作成には多くの形式があります.通常は以下の方法を採用します.
パッケージ:クラスとは、関数の変数を保存しています.この関数は自分の属性と方法があります.属性と方法を一つの種類に構成する過程がパッケージです.
ですから、パッケージを実現するには、JSでクラスを実現しなければなりません.
呼び出し時に、私達はvar getUserInfoを使うことができません.myself=GetUserInfo()はこのように使いにきました.次のように
関数の作成には多くの形式があります.通常は以下の方法を採用します.
function getName(){
//get name here
}
function getAge(){
//get age here
}
var getName = function(){
//get name here
}
var getAge= function(){
//get age here
}
しかし、このようなやり方には欠点があります.このような関数はすべて大域変数なので、チームで協力したり、プロジェクト関数が多い時に、関数名の重複問題が発生します.それはまずいです.関数が上書きされ、必要でない仕事量が発生します.したがって、次のようにすることができます.var GetUserInfo= {
getName:function(){
//get name here
},
getAge :function(){
//get age here
}
}
//
var GetUserInfo= function(){};
GetUserInfo.getName = function(){
//get name here
},
GetUserInfo.getAge = function(){
//get age here
}
しかし、上記の方法では、このオブジェクトはコピーできないという問題があります.例えば、中のgetUserInfo.getAge()という方法を使いたいだけですが、このようなオブジェクトをコピーして自分で使うことはできません.コードを全部コピーしないと、コードの量が増えてしまいます.var GetUserInfo= function(){
return {
getName :function(){
//get name here
},
getAge : function(){
//get age here
}
}
}
これで私達は安心してgetsUserInfoの中のある方法を複製して自分のために使うことができます.使い方は以下の通りです.var getUserInfo_myself = GetUserInfo()
getUserInfo_myself.getName()
上記の方法は完璧に私達の要求に達することができますが、プログラミングの一番重要なものは何ですか?もちろん時は対象に!対象に向かう三つの基本的な特徴を振り返ってみましょう.パッケージ:クラスとは、関数の変数を保存しています.この関数は自分の属性と方法があります.属性と方法を一つの種類に構成する過程がパッケージです.
ですから、パッケージを実現するには、JSでクラスを実現しなければなりません.
//ES5
var GetUserInfo= function(){
this.getName = function(){
//get name here
},
this.getAge = function(){
//get age here
},
}
//this , ,this
// this getUserInfo_myself
上のコード(コンストラクタ)は一つの種類を実現しました.(関数は自分の属性があり、自分の方法があります.)呼び出し時に、私達はvar getUserInfoを使うことができません.myself=GetUserInfo()はこのように使いにきました.次のように
var getUserInfo_myself = new GetUserInfo()
getUserInfo_myself()
これで終わりだと思いますか?これは一番いい案ではないです.newを通じて新しいオブジェクトを作成する時、新しく作成したオブジェクトはいずれも一回のthisの属性をコピーして、多く使うと多くの消費が発生するので、避けられますか?いいです原型の方式で実現します.下を見てください.//ES5
var GetUserInfo=function(){};
GetUserInfo.prototype.getName={
//get name here
}
GetUserInfo.prototype.getAge={
//get age here
}
//ES5
var GetUserInfo=function(){};
GetUserInfo.prototype={
getName(){
//get name here
}
getAge(){
//get agehere
}
}
// ES6
class GetUserInfo{
constructor(){}
getName(){
//get name here
}
getAge(){
//get age here
}
}
使用方法は以下の通りですvar getUserInfo_myself = new GetUserInfo()
// class new,
getUserInfo_myself.getName()
getUserInfo_myself.getAge()
これまでの例では、私たちはgetNameとgetAgeの方法を実行したいです.myselfは二回書いてください.チェーンで呼んで最適化できます.どうすればいいですか?下を見てください//
var GetUserInfo= {
getName: function(){
console.log('getName')
console.log(this)
return this
},
getAge: function(){
console.log('getAge')
console.log(this)
return this
}
}
GetUserInfo.getName().getAge()
// this GetUserInfo, GetUserInfo.getName().getAge()
//1. GetUserInfo.getName() this,this GetUserInfo,GetUserInfo getName() getAge()
//2. this.getAge() GetUserInfo.getAge()
//
var GetUserInfo = function(){}
GetUserInfo.prototype={
getName(){
//get name here
return this
}
getAge(){
//get agehere
return this
}
}