码迷,mamicode.com
首页 > 其他好文 > 详细

深度测试题

时间:2020-03-14 20:30:17      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:name   返回   convert   测试题   构造函数   color   apple   pre   javascrip   

一个原型题(注意我做错的部分)

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.返回这个新对象

深度测试题

标签:name   返回   convert   测试题   构造函数   color   apple   pre   javascrip   

原文地址:https://www.cnblogs.com/-constructor/p/12493704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!