javascript - Bukankah ini fungsi literal objek? Mengapa anda memerlukan permulaan baharu?
淡淡烟草味
淡淡烟草味 2017-07-05 10:52:40
0
4
860

Saya ingat ini bukan pembina Mengapa ini dan yang baru digunakan sama seperti pembina?

淡淡烟草味
淡淡烟草味

membalas semua(4)
学习ing

Sebarang fungsi dalam javascript hanya gunakan new 关键字调用,它都可以被称作 构造函数.

Apabila menggunakan kata kunci baharu untuk memanggil fungsi, objek akan diisytiharkan secara tersirat di dalam fungsi, dan kemudian objek akan diberikan kepada ini, dan akhirnya ini akan dikembalikan secara tersirat Apabila menggunakan kata kunci baharu untuk memanggil kaedah buku pengarang , ia bersamaan dengan Proses berikut.

function Book(id, bookname){
    var o = new Object();
    o.id = id;
    o.bookname = bookname;
    return o;
}
var b = Book(123,'javascript高级程序设计');

O di sini sebenarnya adalah objek yang biasa kita lihat.

小葫芦

Tiada kelas atau pembina dalam JavaScript.

function Book (){}

// Book 是一个函数
typeof Book
"function"

// Book 是 Function
Book instanceof Function
true

// Book 是 Object
Book instanceof Object
true

Gunakan new untuk mencipta objek

var book = new Book()

// book 是一个对象
typeof book
"object"

// book 不是 Function 的实例
book instanceof Function
false

// book 是 Object 的实例
book instanceof Object
true

// book 是 Book 的实例
book instanceof Book
true

Walaupun tiada pembina dalam js, perkataan ini juga digunakan dalam dokumentasi MDN: https://developer.mozilla.org...

Apabila kod new foo(...) dilaksanakan:

  • Objek baharu dicipta. Ia mewarisi daripada foo.prototype.

  • Pembina foo 被执行。执行的时候,相应的传参会被传入,同时上下文(this)会被指定为这个新实例。new foo 等同于 new foo(), hanya boleh digunakan apabila tiada parameter dilalui.

  • Jika pembina mengembalikan "objek", maka objek ini akan menggantikan keseluruhan new出来的结果。如果构造函数没有返回对象,那么newhasil. Jika pembina tidak mengembalikan objek, maka hasilnya akan menjadi objek yang dibuat dalam langkah 1. ps: Secara amnya, pembina tidak mengembalikan sebarang nilai, tetapi jika pengguna ingin mengatasi nilai pulangan ini, dia boleh memilih untuk kembalikan objek biasa untuk menimpanya. Sudah tentu, mengembalikan tatasusunan juga akan ditimpa, kerana tatasusunan juga merupakan objek.

Walaupun ES6 menambah kelas, ia hanyalah gula sintaksis:

class Book{}

typeof Book
"function"
女神的闺蜜爱上我

Anda salah faham konsep pembina.

Sebenarnya, tidak sepatutnya ada istilah 'pembina' dalam js, tetapi harus difahami sebagai kaedah pembinaan fungsi. Ini bermakna mana-mana fungsi boleh digunakan, dan mana-mana fungsi boleh dipanggil 'pembina'. Apabila anda menulis apa yang dipanggil "pembina", adakah anda melihat apa-apa perbezaan antara ia dan fungsi biasa? new

Di atas, kecuali fungsi anak panah es6.

習慣沉默

Setiap fungsi dalam js adalah bersamaan dengan pembina (kecuali untuk fungsi anak panah ES6 yang sebenar).
Hei, js yang menakjubkan!

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan