JavaScript面试中遇到的几个问题详解(二)
2017-11-04 11:46
393 查看
前言:
接上篇文章: JavaScript面试中遇到的几个问题详解(一)
题目二:
function P1(name){ if(name) this.name = name; } function P2(name){ this.name = name; } function P3(name){ this.name = name || "Tom"; } P1.prototype.name = 'Peter'; P2.prototype.name = 'Peter'; P3.prototype.name = 'Peter'; 求: (new P1()).name = ? (new P2()).name = ? (new P3()).name = ?
考点分析:
1.考查了面试者对原型对象的理解 2.考查对象取值的过程 3.考查this定义的变量的特点 4.考查 || 操作符的特点
答题所需知识点:
1.首先我们要了解js中如果没有给定义函数的形参传入的时候,js是不会报错的,只是形参的值为undefined 2.了解js中每个对象都有一个原型对象 3.了解对象的取变量值过程:首先会在对象定义中取变量值,若找到直接返回,若没有找到则在在从原型对象中寻找, 若找到返回原型对象中的值,如没有找到返回undefined;若对象中和对象的原型中都有该属性,则返回对象中的属性值,不论对象中的值是什么。 4.this定义的变量不会被解释器提前,这一点和var定义变量不同。var定义变量会在执行之前解释器会将变量的声明提取到作用域的最前端。 5. || 操作符的使用请参考我的另一篇文章: http://blog.csdn.net/xinghuo0007/article/details/70832783 6. 在JS中 除了 null,undefined,"",0,NaN,false 以外的所有,都是true
结果分析: (如果看不懂,可以回头看 答题所需知识点)
1.首先看 (new P1()).name ; new P1() 创建一个匿名对象,没有传入参数。有P1的构造函数定义可以,此时的形参name为undefined,所以 if 条件判断为false;this.name = name不会被执行, 因此在匿名对象中就没有name属性;但是(new P1()).name,这时由我们知识点3 可知 (new P1()).name 返回的是原型对象中的name属性值: Peter 2.现在看 (new P2()).name ; P2构造函数没有if语句,因此直接将undefined 赋值给该匿名对象的name属性, 由知识点3可以,(new P2()).name 返回的是对象中的name属性的值:undefined 3.最后看:(new P3()).name ; P3的构造函数中的 name形参也是 undefined ,由知识点5可知 ,此时this.name = "Tom", 所以有知识点3可知:,(new P3()).name 返回的是对象中的name属性的值:Tom
验证代码:
function P1(name){ if(name) this.name = name; } function P2(name){ this.name = name; } function P3(name){ this.name = name || "Tom"; } P1.prototype.name = 'Peter'; P2.prototype.name = 'Peter'; P3.prototype.name = 'Peter'; console.log("P1的name值为:"+ (new P1()).name) console.log("P2的name值为:"+ (new P2()).name) console.log("P3的name值为:"+ (new P3()).name)
结果为:
总结:
由验证结果可知我们的结果分析是正确的。解决这个问题并不算什么,这只是js中的冰山一角,js博大精深还需要我们努力探索。
相关文章推荐
- 详解升级Android Studio3.0时遇到的几个问题
- 嵌入式面试时遇到的几个常见问题
- hadoop面试时可能遇到的问题,你能回答出几个 ?
- JavaScript 面试中常见算法问题详解
- 总结我在几个大公司面试中遇到的问题
- C/C++面试遇到的几个知识盲点以及编程问题
- 最近面试遇到的几个问题
- hadoop面试时可能遇到的问题,你能回答出几个 ?
- JavaScript 面试中常见算法问题详解
- JavaScript 面试中常见算法问题详解
- tcp/ip--面试中遇到几个问题
- hadoop面试时可能遇到的问题,你能回答出几个 ?
- 开发自动完成功能中遇到的几个问题---javascript+XMLHTTP+DOM
- 面试的时候遇到的几个问题
- C/C++面试遇到的几个知识盲点以及编程问题
- JavaScript 面试中常见算法问题详解
- 设计师面试常遇到的几个问题如何解答
- JavaScript 面试中常见算法问题详解
- JavaScript 面试中常见算法问题详解
- 阿里巴巴前端程序员第一轮面试,这些问题你能答上几个?