深度测试题
Posted -constructor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度测试题相关的知识,希望对你有一定的参考价值。
一个原型题(注意我做错的部分)
const foo = {} const f = function() {} Function.prototype.a = ‘value a‘ Object.prototype.b = ‘value b‘ console.log(foo.a, foo.b, f.a, f.b) console.log(‘undefined‘,‘b‘,"a",undefined) //实际结果 //undefined "value b" "value a" "value b" VM208:6 undefined b a undefined
剩下一个题也做错了(非常重要)
function Person(name) { this.name = name return name; } let p = new Person(‘Tom‘); //实例化Person过程中,Person返回什么(或者p等于什么)? //答案:{name: ‘Tom‘} //若将题干改为 //function Person(name) { this.name = name return {} } let p = new Person(‘Tom‘); //实例化Person过程中,Person返回什么(或者p等于什么)? //答案 {} //构造函数不需要显示的返回值。使用new来创建对象(调用构造函数)时,如果return的是非对象(数字、字符串、布尔类型等)会忽而略返回值;如果return的是对象,则返回该对象(注:若return null也会忽略返回值)。
typeof和instanceof的区别?
//在 javascript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 “object”。 //instanceof 运算符用于检测构造函数的 prototype 属性是否出现在某个实例对象的原型链上。
new和instanceof的内部机制
new有四步骤:
1.创建一个新对象
2.把构造函数的作用域指向新对象(因此this就指向这个新对象)
3.执行构造函数的代码,为新对象(添加属性)【如果代码中有return非对象,则返回这个新对象内的内容】
//有return 函数结束 但是返回之前新创建的对象 , function Inherit(inherit, name) { this.inherit= inherit return name this.name = name } let inherit = new Inherit(‘a‘,‘b‘) console.log(inherit) VM64:7 Inherit {inherit: "a"}
如果代码中有return对象,则返回这个对象内的内容
function Inherit(inherit, name) { this.inherit= inherit return {aa:‘aa‘} this.name = name } let inherit = new Inherit(‘a‘,‘b‘) console.log(inherit.name) VM69:7 undefined //返回全新对象 与构造函数无关
4.返回这个新对象
以上是关于深度测试题的主要内容,如果未能解决你的问题,请参考以下文章