javascriptのnew操作子
1294 ワード
new
演算子はどのようなことをしましたか?
1.新たにオブジェクトを生成しました.2.原型にリンクしました.3.バインディングthis 4.新しいオブジェクトを返します.
自分でnewを実現します.
実例の対象としては、newによって生成されるものであり、Fnction Foo()であれ、let a={b:1}であれ.オブジェクトを作成するには、文字どおりにオブジェクトを作成することが推奨されています.new Object()を使ってオブジェクトを作成するには、作用ドメインチェーンを介してObjectを次々に見つける必要がありますが、文字どおりの方法を使うと大丈夫です.
演算子はどのようなことをしましたか?
1.新たにオブジェクトを生成しました.2.原型にリンクしました.3.バインディングthis 4.新しいオブジェクトを返します.
自分でnewを実現します.
function create() {
//
let obj = new Object()
//
let Con = [].shift.call(arguments)
//
obj.__proto__ = Con.prototype
// this,
let result = Con.apply(obj, arguments)
// new
return typeof result === 'object' ? result : obj
}
インスタンスオブジェクト実例の対象としては、newによって生成されるものであり、Fnction Foo()であれ、let a={b:1}であれ.オブジェクトを作成するには、文字どおりにオブジェクトを作成することが推奨されています.new Object()を使ってオブジェクトを作成するには、作用ドメインチェーンを介してObjectを次々に見つける必要がありますが、文字どおりの方法を使うと大丈夫です.
function Foo() {}
// function
// new Function()
let a = { b: 1 }
// new Object()
newには演算子優先度に注意が必要です.function Foo() {
return this;
}
Foo.getName = function () {
console.log('1');
};
Foo.prototype.getName = function () {
console.log('2');
};
new Foo.getName(); // -> 1
new Foo().getName(); // -> 2
new Foo()の優先度はnew Fooより大きいので、上記のコードに対してこのようにして実行順序を分けることができます.new (Foo.getName());
(new Foo()).getName();
最初の関数については、まずFoo.getName()を実行したので、結果は1である.後者の場合は、まずnew Foo()を実行してFoo上のgetName関数をプロトタイプチェーンで見つけたので、結果は2である.