前言
最近在家看书:《你不知道的Javascript》,看到构造函数调用时会绑定this,就顺便打开控制台输了一些代码,详细测试了一下。
构造函数简单的讲,即定义出来专供new 式调用的函数。
如:
function A(b) { this.b = b || 'bbb'; }
然后你就可以通过new ,来构建一个 A 的实例:
var a = new A('B')
但是,一个首要的坑是,构造函数与一个普通函数并无不同,如果你故意不使用new,或忘记用new,都会得到奇怪的错误:
var aa = A('adadada');
这样调用,并不会显式地报错,但实际上隐患深埋:
- aa并不是A的实例,而变成了 undefined
- 多了一个名为 b 的全局变量,值是 ‘adadada'
这就是无new 调用构造函数的坑。
下面说其他的:
构造函数自身有返回值
比如:
function A(b) { this.b = b || 'bbb'; return {b: '0000'}; }
这个时候,无论是否使用new来调用A,得到的结果都会相同,即得到一个普通对象:{b:'0000′}
当然,此时是否带 new 调用,还是有一个不同点的,即:不带new时,依然会莫名声明一个 叫 b 的全局变量。
既然,构造函数有显式返回值时,会代替默认应该返回的this,成为返回值,那么,是不是所有返回值都能覆盖this呢?
测试显式返回值
众所周知,函数都是有返回值的,只是如果没有 return,则会返回undefined.
那么,我就在构造函数里显式返回一个undefined,会怎么样?
var a = function (){this.b = 'b'; return undefined}; new a(); // {b:'b'}
显式返回一个 undefined ,并不能阻止构造函数式调用的默认行为。
下图是更多测试:
简单的总结:
显式的返回以下值:undefined, null, boolean, number等基础类型,并不会代替 new 式调用的默认行为。
但显式返回以下值:{},[],RegExp, Date, Function,均会代替 new 调用的默认返回值 this.
大家都看到了,后者,全都是 对象,是复杂类型。
随手一记
前面说过,本该进行 new 式调用的构造函数,被当作普通函数调用,那么,如果函数体中,有 this.x = xxx
这样的赋值语句,则会被赋值给全局对象(即 windows),从而变成一个全局变量。
原因相信大家都知道,而本书中也专门讲过:函数调用时,默认的this就是绑定至全局对象。
而本书还提到:如果函数体是严格模式,则不会绑定 this 至全局对象,如:
var a = function (){'use strict';this.b = 'b'; return /111/g}; a(); // 直接报错
因为严格模式下,默认的 this 指向 undefined
所以说,有两点要提一下:
- 严格模式真不错
- 如果你想声明一个构造函数,那么严格模式是非常必要的
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]