赞
踩
js构造函数详解
js中箭头函数和普通函数的区别
箭头函数特点:
1)箭头函数内部的this对象,就是函数上下文中的对象,而不是调用时的对象,不能用call,appply等方法改变this指向。
2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
3)不可以使用arguments对象,该对象在函数体内不存在,如果要用,可以用rest参数代替。
4)不可以使用yield命令,因此箭头函数不能用作Generator函数。
箭头函数用法:
1)使回调函数更简洁
2)搭配数组方法使用
不能使用的场景:需要用到函数方法中this的情况,不可作为构造函数使用
箭头函数没有函数名,不可以像普通函数一样作为构造函数使用,也不能用new创建实例类型。原因在于箭头函数中的this是固定的,在普通函数中this指向调用它的对象,而在箭头函数中,this永远指向其上下文。它的固定不是因为this绑定,是在于因为箭头函数没有自己的this,导致内部代码块的this就是外层代码块的this。因此箭头函数不能作为构造函数。箭头函数的 this 永远指向其上下文的 this ,任何方法都改变不了其指向,如 call() , bind() , apply()
构造函数通过“new 函数名”来实例化函数,任何的普通函数都可以作为构造函数使用,它们主要是从功能上来区分的。普通函数作为可以复用的代码,构造函数主要用来创建实例对象,特点是和new一起使用。在实践中通常使用首字母大写来区分。class 为构造函数的语法糖,即 class 的本质是构造函数,在执行时会转换为构造函数执行。
匿名函数是一个function关键字后没有标识符的函数表达式。通过匿名函数可以实现闭包。匿名函数模拟了块级作用域,执行完匿名函数后,存储在内存中的相应变量会被销毁。使用匿名函数可以减少全局变量,降低命名冲突。
缺点:调试困难,降低代码可读性。
this对象是在运行时基于函数执行环境绑定的,在全局函数中,this=window,在函数被作为某个对象的方法调用时,this等于这个对象。
匿名函数立即执行,也称为立即执行函数表达式(IIFE)
// 无参数的匿名函数 (function () { console.log('zxx') })(); // 推荐使用 (function () { console.log('zxx') }()) // 带参数的匿名函数 (function (a, b, c) { console.log('参数一:', a) // 参数一: 这是普通函数传参的地方 console.log('参数二:', b) // 参数二: 我是参数二 console.log('参数三:', c) // 参数三: zxx })('这是普通函数传参的地方', '我是参数二', 'zxx') //匿名函数赋值 let zxx = function (zxx) { console.log(zxx) }('zxx')
匿名函数用法
1.事件 $('#zxx').onclick = function () { console.log('给按钮添加点击事件') } 2.对象 var obj = { name: 'zxx', zxx: function () { return this.name + ' is' + ' good girl' } } console.log(obj.zxx()) // zxx is good girl 3.函数表达式 var zxx = function () { return 'zxx is good girl' } console.log(zxx()) // zxx is good girl 4.回调函数 setInterval(function () { console.log('zxx is good girl') }, 1000) 5.作为函数的返回值 function zxx () { // 返回匿名函数 return function () { return 'zxx' } } console.log(zxx()()) // zxx
1、首先创一个新的空对象。
2、根据原型链,设置空对象的 _proto_为构造函数的 prototype ,并将this指向新创建的对象。
3、执行构造函数的代码(为这个新对象添加属性)。
4、返回这个对象。
对new理解:new 申请内存, 创建对象,当调用new时,后台会隐式执行new Object()创建对象。所以,通过new创建的字符串、数字是引用类型,而是非值类型。
new 被调用后大致做了哪几件事情?
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。