Rumah hujung hadapan web tutorial js 理解Javascript_08_函数对象_javascript技巧

理解Javascript_08_函数对象_javascript技巧

May 16, 2016 pm 06:18 PM
objek fungsi

函数对象
首先,大家得明确一个概念:函数就是对象,代表函数的对象就是函数对象。既然是对象,那它又是被谁构造出来的呢?下面我们来看一段描述:JavaScript代码中定义函数,或者调用Function创建函数时,最终都会以类似这样的形式调用Function函数:var newFun=Function(funArgs, funBody); 。由此可知函数对象是由Function这个函数对象构造出来的。
注:Function对象本身也是一个函数,因此它也一个函数对象。关于Function的深入理解,请见后续博文。
正面我们来看一段代码:

复制代码 代码如下:

//定义方式一
function func(x) {
alert(x);
}
//定义方式二
var func = function(x) {
alert(x);
};
//实际执行
var func = new Function(“x”, “alert(x);”);

通过上面的代码可知,函数func无非是由Function对象接收两个参数后构造出来的而矣!

注:关于定义方式一与定义方式二的区别,请见后续博文



函数对象的创建过程

函数对象详细创建步骤如下:

1. 创建一个build-in object对象fn

2. 将fn的内部[[Prototype]]设为Function.prototype
3. 设置内部的[[Call]]属性,它是内部实现的一个方法,处理函数调用的逻辑。(简单的理解为调用函数体)

4. 设置内部的[[Construct]]属性,它是内部实现的一个方法,处理逻辑参考对象创建过程。(简单的理解为创建对象《理解Javascript_06_理解对象的创建过程》一文)

5. 设置fn.length为funArgs.length,如果函数没有参数,则将fn.length设置为0
6. 使用new Object()同样的逻辑创建一个Object对象fnProto
7. 将fnProto.constructor设为fn
8. 将fn.prototype设为fnProto
9. 返回fn

步骤1跟步骤6的区别为,步骤1只是创建内部用来实现Object对象的数据结构(build-in object structure),并完成内部必要的初始化工作,但它的[[Prototype]]、[[Call]]、[[Construct]]等属性应当为 null或者内部初始化值,即我们可以理解为不指向任何对象(对[[Prototype]]这样的属性而言),或者不包含任何处理(对 [[Call]]、[[Construct]]这样的方法而言)。步骤6则将按照《理解Javascript_06_理解对象的创建过程》创建一个新的对象,它的 [[Prototype]]等被设置了。
从上面的处理步骤可以了解,任何时候我们定义一个函数,它的prototype是一个Object实例,这样默认情况下我们创建自定义函数的实例对象时,它们的Prototype链将指向Object.prototype。

注:Function一个特殊的地方,是它的[[Call]]和[[Construct]]处理逻辑一样。深层次的原因将在后续博文中介绍。

下面我们写一些用例脚本来测试一下上面的理论:

复制代码 代码如下:

function Animal(){
}
alert(Animal.length);//0

var dog = new Animal();

这个JS证明了步骤5的正确性。最后,还是来看一下函数对象的内存图,简单起见,内存图只描述了Animal的构造过程:
理解Javascript_08_函数对象_javascript技巧
来自于一个整体的分析图:
理解Javascript_08_函数对象_javascript技巧
图片本身已经能解释很多很多的问题了,结合前面instanceof原理,对象构造原理,原型链原理,自已去体会吧,我就不多说什么了。

其实上Function对象是一个很奇妙的对象,它与Object的关系更是扑朔迷离,我将在《理解Javascript_09_Function与Object》中解释这一切。


最后的声明:理论过于复杂,我不改保证其正确性。但经过多方的测试,还未发现理论与实际冲突的地方。
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menukar penunjuk fungsi kepada objek fungsi dan sebaliknya? Bagaimana untuk menukar penunjuk fungsi kepada objek fungsi dan sebaliknya? Apr 18, 2024 am 08:54 AM

Dalam C++, penunjuk fungsi boleh ditukar kepada objek fungsi melalui templat std::function: gunakan std::function untuk membalut penunjuk fungsi ke dalam objek fungsi. Gunakan fungsi ahli std::function::target untuk menukar objek fungsi kepada penunjuk fungsi. Transformasi ini berguna dalam senario seperti pengendalian acara, panggilan balik fungsi dan algoritma generik, memberikan lebih fleksibiliti dan kebolehgunaan semula kod.

Bagaimana untuk mereka bentuk objek fungsi STL tersuai untuk meningkatkan kebolehgunaan semula kod? Bagaimana untuk mereka bentuk objek fungsi STL tersuai untuk meningkatkan kebolehgunaan semula kod? Apr 25, 2024 pm 02:57 PM

Menggunakan objek fungsi STL boleh meningkatkan kebolehgunaan semula dan termasuk langkah-langkah berikut: Tentukan antara muka objek fungsi (buat kelas dan warisi daripada std::unary_function atau std::binary_function) Overload operator() untuk mentakrifkan kelakuan fungsi dalam operator terlampau beban() Laksanakan fungsi yang diperlukan menggunakan objek fungsi melalui algoritma STL (seperti std::transform)

Apakah peranan yang dimainkan oleh objek fungsi C++ dalam STL? Apakah peranan yang dimainkan oleh objek fungsi C++ dalam STL? Apr 25, 2024 pm 12:21 PM

Fungsi objek fungsi dalam STL terutamanya termasuk: 1. Perbandingan dan pengisihan bekas (seperti std::sort, std::find_if 2. Penyesuaian algoritma (menyesuaikan tingkah laku algoritma melalui predikat tersuai atau fungsi perbandingan); (lanjutkan fungsi bekas). Selain itu, objek fungsi digunakan dalam perpustakaan fungsi, pengaturcaraan berorientasikan objek, dan pengaturcaraan selari.

Apakah persamaan dan perbezaan antara penunjuk fungsi dan objek fungsi dalam C++? Apakah persamaan dan perbezaan antara penunjuk fungsi dan objek fungsi dalam C++? Apr 12, 2024 pm 01:18 PM

Penunjuk fungsi dan objek fungsi adalah kedua-dua mekanisme untuk mengendalikan fungsi sebagai data. Penunjuk fungsi ialah penuding kepada fungsi, manakala objek fungsi ialah objek yang mengandungi operator terlampau beban(). Kedua-duanya boleh menangkap pembolehubah dan membuat penutupan. Perbezaannya ialah penunjuk fungsi adalah jenis primitif, manakala objek fungsi ialah kelas penunjuk fungsi mesti menunjuk kepada fungsi yang sah, jika tidak, tingkah laku yang tidak ditentukan akan berlaku, manakala objek fungsi boleh wujud secara bebas daripada fungsi objek fungsi biasanya lebih mudah untuk digunakan dapatkan semula daripada penggunaan penunjuk fungsi. Dalam senario praktikal, ia boleh digunakan untuk menentukan peraturan pengisihan dalam algoritma pengisihan.

Bagaimana untuk menggunakan objek fungsi STL dengan berkesan dalam C++? Bagaimana untuk menggunakan objek fungsi STL dengan berkesan dalam C++? Jun 04, 2024 pm 05:43 PM

Objek fungsi STL dalam C++ menyediakan cara yang cekap dan fleksibel untuk mengendalikan data kontena, termasuk objek fungsi unari (menerima 1 parameter dan mengembalikan hasil), objek fungsi binari (menerima 2 parameter dan mengembalikan hasil) dan functors (Operator panggilan fungsi terlampau beban) . Objek fungsi mempunyai kelebihan kebolehgunaan semula, kebolehskalaan dan pengoptimuman prestasi. Dalam kes sebenar, fungsi std::transform() menggunakan objek fungsi std::negate untuk menafikan setiap elemen dalam bekas. Petua termasuk menggunakan objek fungsi sebaris, mencipta ungkapan lambda tersuai, menggunakan objek fungsi sebagai nilai pulangan dan memahami semantik dan had objek fungsi.

Penunjuk fungsi C++ dan objek fungsi Penunjuk fungsi C++ dan objek fungsi Apr 12, 2024 am 11:51 AM

Penunjuk fungsi C++ dan objek fungsi ialah alat untuk menangani fungsi. Penunjuk fungsi menyimpan alamat fungsi, dan objek fungsi membenarkan pengendali lebih muatan dan mengekalkan keadaan. Mereka mempunyai aplikasi dalam menyusun algoritma, pengendalian acara dan corak strategi, meningkatkan fleksibiliti kod, kebolehgunaan semula dan kebolehselenggaraan.

Apakah objek fungsi STL yang biasa digunakan dalam perpustakaan standard C++? Apakah objek fungsi STL yang biasa digunakan dalam perpustakaan standard C++? Apr 25, 2024 pm 01:06 PM

C++STL menyediakan pelbagai objek fungsi yang boleh digunakan untuk membandingkan, mengisih dan mengendalikan elemen. Objek fungsi biasa termasuk kurang untuk pengisihan menaik, lebih besar untuk pengisihan menurun, equal_to untuk membandingkan kesamaan dan bind2nd dan mem_fn untuk parameter fungsi mengikat. Dalam amalan, tatasusunan boleh diisih dalam tertib menurun dengan menggunakan objek fungsi yang lebih besar, seperti yang ditunjukkan di bawah: Menggunakan fungsi sort(), objek fungsi yang lebih besar akan mengisih elemen dalam julat yang ditentukan dalam tertib menurun.

Penunjuk Fungsi C++ lwn. Objek Fungsi: Membuka Kunci Potensi Tersembunyi Kod Anda Penunjuk Fungsi C++ lwn. Objek Fungsi: Membuka Kunci Potensi Tersembunyi Kod Anda Apr 29, 2024 am 10:33 AM

Penunjuk fungsi C++ menunjuk ke fungsi, membenarkan fungsi dipanggil melalui penunjuk. Objek fungsi ialah kelas atau struktur yang membebankan operator operator() dan boleh dipanggil seperti fungsi. Ia berguna apabila bekerja dengan fungsi panggil balik, iaitu fungsi yang dihantar ke fungsi lain sebagai argumen.

See all articles