首頁 >web前端 >前端問答 >javascript中new的用法是什麼

javascript中new的用法是什麼

WBOY
WBOY原創
2022-01-28 16:24:474567瀏覽

在JavaScript中,new運算子用來建立一個自訂物件實例,或是建構函式內建物件的實例;new建立出來的實例可以存取建構函式Person內的屬性。

javascript中new的用法是什麼

本教學操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。

javascript中new的用法是什麼

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"}

從這個栗子中,我們可以看到,new 具有以下能力:

1、new 建立出來的實例可以存取建構函式Person內的屬性;

2、new 建立出來的實例可以存取建構函式原型上的屬性;

3、new 可以將建構函式中的this綁定到新建立出來的物件上;

那我們就先針對new的這三個能力先實現一下:

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"}

看來跟new的能力比較相像了。但是當建構函式裡有回傳值時,是怎麼樣子的呢,再看個:

// 当返回值是对象时:
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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn