blog

J45 組み込みnewをリファクタリングする

タイトル組み込みnewのリファクタリング...

Apr 19, 2020 · 2 min. read

問題 組み込みのnewリファクタリング

function Dog(name) {
 this.name = name;
}
Dog.prototype.bark = function () {
 console.log('wangwang');
}
Dog.prototype.sayName = function () {
 console.log('my name is ' + this.name);
}
/*
let sanmao = new Dog(' ');
sanmao.sayName();
sanmao.bark();
function _new() {
 //=>完成したコード
}
let sanmao = _new(Dog, ' ');
sanmao.bark(); //=>"wangwang"
sanmao.sayName(); //=>"my name is  "
console.log(sanmao instanceof Dog); //=>true

組み込みのnewキーワードに基づいて、プロトタイプのプロパティやメソッドを呼び出すことができるDogのインスタンスsanmaoを作成することができます。

function Dog(name) {
	this.name = name;
}
Dog.prototype.bark = function () {
	console.log('wangwang');
}
Dog.prototype.sayName = function () {
	console.log('my name is ' + this.name);
}
/*
 * _newそして、組み込みのnewの結果をシミュレートするために、_newメソッドを自分で実装する必要がある。
 * @params
 * Fn:インスタンスを作成したいクラスを渡す。
 * 後続のパラメータは固定数ではなく、渡された値が現在のクラスの実行に与えられる。
 * @return
 * Fnこのクラスのインスタンス 
 */
function _new(Fn) {
	// 渡された実パラメータ情報の処理:Fnに渡された値以外のすべての値を取得する。
	let args = Array.from(arguments).slice(1);
	// インスタンス・オブジェクトOBJを作成する
	let obj = Object.create(Fn.prototype);
	// Fn関数を実行する際には、FnのTHISがインスタンス・オブジェクトOBJを指すようにする必要がある。
	let result = Fn.apply(obj, args);
	// 生成されたインスタンスオブジェクトを返す
	if (result !== null && (typeof result === "object" 
 typeof result === "function")) {
		return result;
	}
	return obj;
}
let sanmao = _new(Dog, ' ', , 300);
sanmao.bark(); //=>"wangwang"
sanmao.sayName(); //=>"my name is  "
console.log(sanmao instanceof Dog); //=>true
// sanmao = new Dog(' ');
// 最初のステップは、Dogを通常の関数として実行することだ。
// 特別1:オブジェクトを作る
// 特殊2:そして、関数内のTHISは作成されたオブジェクトを指すようにする。
// 特殊3:結果を返さない関数や基本データ値を返す関数の場合は、作成したインスタンスオブジェクトを返す。
/* let obj = {};
obj.__proto__ = Fn.prototype; //=>IEこれは__proto__ */
/*
// =>Object.create 
let xxx = {name:' '};
let obj = Object.create(xxx);
空のオブジェクトを作り、xxxをそのプロトタイプとする。
 */
Read next

vue basic 04 - コンポーネントと通信する他の方法

vue foundation 04 - コンポーネントと通信する他の方法 1. provide と inject - 階層的なネストでデータ通信を処理 親コンポーネントの provide で変数を提供し、子コンポーネントの inject で変数を注入します。いいえ

Apr 17, 2020 · 2 min read