ホームページ >ウェブフロントエンド >フロントエンドQ&A >JavaScriptでのnewの使い方は何ですか

JavaScriptでのnewの使い方は何ですか

WBOY
WBOYオリジナル
2022-01-28 16:24:474568ブラウズ

JavaScript では、new 演算子はカスタム オブジェクト インスタンス、またはコンストラクターに組み込まれたオブジェクトのインスタンスを作成するために使用されます。new によって作成されたインスタンスは、コンストラクター Person のプロパティにアクセスできます。

JavaScriptでのnewの使い方は何ですか

このチュートリアルの動作環境: Windows 10 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。

JavaScript での new の使用法とは何ですか

new の目的

new: new 演算子は、カスタム オブジェクト インスタンス、または組み込みコンストラクターを作成するために使用されます。オブジェクトの例。どういう意味ですか?ちょっと発音が難しいので、まずは見てみましょう。

新しい F() の場合に何が起こるか

最初のバージョン

栗はここにあります:

function Person(name, age) {
    this.name = name
    this.age = age
    console.log(this) // Person{name: "xuedinge", age: "20"}
}
Person.prototype.have = "cat"
const person = new Person("xuedinge", "20")
console.log(person.name) // xuedinge
console.log(person.have) // cat
console.log(person) // Person{name: "xuedinge", age: "20"}

この栗から、新しいものには が含まれていることがわかります。次の機能:

1. new によって作成されたインスタンスは、コンストラクター Person のプロパティにアクセスできます;

2. new によって作成されたインスタンスは、コンストラクター プロトタイプのプロパティにアクセスできます;

3. new は、コンストラクター内でこれを新しく作成されたオブジェクトにバインドできます;

次に、最初に new のこれら 3 つの機能を実装します:

function fakeNew(Fn) {
    // 创建一个空对象
    let obj = new Object()
    // 将新对象的原型指针指向构造函数的原型
    obj.__proto__ = Fn.prototype
    // 处理除了 Fn 以外的剩余参数
    Fn.apply(obj, [].slice.call(arguments, 1))
    return obj
}

効果を確認してください

function Person(name, age) {
    this.name = name
    this.age = age
    console.log(this) // Person {name: "xuedinge", age: "20"}
}
Person.prototype.have = "cat"
function fakeNew(Fn) {
    // 创建一个空对象
    let obj = new Object()
    // 将新对象的原型指针指向构造函数的原型
    obj.__proto__ = Fn.prototype
    // 处理除了 Fn 以外的剩余参数
    Fn.apply(obj, [].slice.call(arguments, 1))
    return obj
}
const newPerson = fakeNew(Person, "xuedinge", "20")
console.log(newPerson.name) // xuedinge
console.log(newPerson.have) // 20
console.log(newPerson) // Person {name: "xuedinge", age: "20"}

ニューの能力と似ているようです。しかし、コンストラクターに戻り値がある場合はどうなるのでしょうか? もう一度見てみましょう:

// 当返回值是对象时:
function Person(name, age) {
    this.name = name
    this.age = age
    console.log(this) // Person {name: "xuedinge", age: "20"}
    return {
      car: "leikesasi"
    }
}
Person.prototype.have = "cat"
const person = new Person("xuedinge", "20")
console.log(person.name) // undefined
console.log(person.have) // undefined
console.log(person.car) // leikesasi
console.log(person) // {car: "leikesasi"}

コンストラクターの戻り値がオブジェクトの場合、new によって作成されるインスタンス オブジェクトはコンストラクタの戻り値 戻り値が通常のオブジェクトの場合の結果を見てください:

// 当返回值是普通值时:
unction Person(name, age) {
    this.name = name
    this.age = age
    console.log(this) // Person{name: "xuedinge", age: "20"}
    return "leikesasi"
}
Person.prototype.have = "cat"
const person = new Person("xuedinge", "20")
console.log(person.name) // xuedinge
console.log(person.have) // cat
console.log(person) // Person{name: "xuedinge", age: "20"}

戻り値が通常のオブジェクトの場合、戻り値がない場合と同じ結果になります。

関連する推奨事項: JavaScript 学習チュートリアル

以上がJavaScriptでのnewの使い方は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。