最近面试遇到各种javascript变态的原型链问题,总结如下(注释的是执行结果):
测试环境:360快速浏览器,firefox
console.log("//////////////////函数表达式/////////////////////////////"); var testProto = function(){ console.log("testProto.111.."); } console.log("-11111---"+(typeof testProto));//-11111---function console.log("-11111--aaa-"+(testProto.prototype));//-11111--aaa-[object Object] console.log("-11111--bbbb-"+(testProto.constructor));//-11111--bbbb-function Function() { [native code] } console.log("-11111--cccc-"+(testProto instanceof Function));//-11111--cccc-true var testProto = 1; console.log("-22222---"+(typeof testProto));//-22222---number console.log("-22222--aaa-"+(testProto.prototype));//-22222--aaa-undefined console.log("-22222--bbbb-"+(testProto.constructor));//-22222--bbbb-function Number() { [native code] } console.log("-22222--cccc-"+(testProto instanceof Object));//-22222--cccc-false console.log("//////////////////函数声明/////////////////////////////"); function testProto(){ console.log("testProto..2222."); } console.log("-11111---"+(typeof testProto));//-11111---number console.log("-11111--aaa-"+(testProto.prototype));//-11111--aaa-undefined console.log("-11111--bbbb-"+(testProto.constructor));//-11111--bbbb-function Number() { [native code] } console.log("-11111--cccc-"+(testProto instanceof Function));//-11111--cccc-false console.log("//////////////////实例化/////////////////////////////"+testProto); try{ var vtp = new testProto(); console.log("-11111---"+(typeof vtp)); console.log("-11111--aaa-"+(vtp.prototype)); console.log("-11111--bbbb-"+(vtp.constructor)); console.log("-11111--cccc-"+(vtp instanceof testProto)); }catch(e){ console.log("error::"+e.message);//error::number is not a function } var testProto = function(){ console.log("testProto.3333..");//testProto.3333.. } console.log("//////////////////覆盖变量/////////////////////////////"+testProto); /** //////////////////覆盖变量/////////////////////////////function (){ console.log("testProto.111.."); } */ try{ var vtp = new testProto(); console.log("-11111---"+(typeof vtp));//-11111---object console.log("-11111--aaa-"+(vtp.prototype));//-11111--aaa-undefined console.log("-11111--bbbb-"+(vtp.constructor)); /** -11111--bbbb-function (){ console.log("testProto.3333.."); } */ console.log("-11111--cccc-"+(vtp instanceof testProto));//-11111--cccc-true }catch(e){ console.log("error::"+e.message); } var testProto = 1; console.log("-22222---"+(typeof testProto));//-22222---number console.log("-22222--aaa-"+(testProto.prototype));//-22222--aaa-undefined console.log("-22222--bbbb-"+(testProto.constructor));//-22222--bbbb-function Number() { [native code] } console.log("-22222--cccc-"+(testProto instanceof Object));//-22222--cccc-false
相关推荐
- 函数在JavaScript中是如何声明的?`function`关键字、表达式函数以及箭头函数有何异同? - 如何实现函数的重载?JavaScript中是否存在真正的函数重载? - 介绍JavaScript原型链的工作原理,以及`__proto__`和`...
2. **函数**:理解函数的概念,包括函数声明、函数表达式(匿名函数、箭头函数)、参数默认值、rest参数、函数返回值等。闭包是JavaScript中的高级特性,面试中可能会让你解释闭包的工作原理及其应用场景。 3. **...
通过这五十个实例的练习,开发者能够全面提高JavaScript编程能力,无论是在解决实际问题还是在面试中,都能展现出更扎实的技术功底。 总结起来,《突破JavaScript编程实例五十讲》是一个综合性的学习资源,它将帮助...
- `let`用于块级作用域的变量声明,解决了var导致的变量提升和函数作用域问题。 - `const`用于声明常量,一旦赋值,就不能再次更改。 2. **解构赋值**: - 允许从数组或对象中提取数据,赋值给新的变量,简化了...
文件内容也触及了JavaScript函数和数组的原型方法,如`Function.prototype`和`Object.prototype`。这些原型对象定义了函数和对象共有的方法,例如`apply`、`call`、`bind`等,它们可以用来改变函数执行时的上下文...
2. **函数与作用域**:函数的定义、调用方式,以及函数表达式和函数声明的区别。深入理解作用域链和闭包机制,闭包的应用场景如模块化、防抖和节流等。 3. **原型与原型链**:理解对象的原型、`__proto__`、`...
1. 函数:JavaScript支持函数式编程,可以使用函数表达式、函数声明、闭包、高阶函数等。在LeetCode中,函数常被用于实现特定的算法。 2. 面向对象:JavaScript的原型链和类概念,以及构造函数、实例化、继承、封装...
在文档中的例子展示了通过立即执行函数表达式(IIFE)创建了一个局部作用域,在这个作用域内声明的变量不会影响到全局作用域。这演示了在JavaScript中变量作用域的特性。 第二个面试题是关于创建原生方法(native ...
### JavaScript 面试知识点总结 #### 基本数据类型 JavaScript 的基本数据类型包括:`Number`(数字)、`String`(字符串)、`Boolean`(布尔)、`Null`(空)、`Undefined`(未定义)、`Symbol`(符号)和 `BigInt...
根据给定文件的信息,我们可以将这些笔试题目概括为以下...通过以上知识点的总结,可以帮助面试者更好地准备笔试题目的相关内容,并对HTML、JavaScript、Struts框架、JSTL标签库以及J2SDK的安装与配置有更深入的理解。
Vue 使用了一个编译器来解析模板语法,将它们转换为 JavaScript 函数,然后在数据变化时执行这些函数来更新视图。 ### 介绍 Vue 的实现流程 1. 初始化 Vue 实例,创建响应式数据。 2. 编译模板,将模板字符串转换...
JavaScript是Web开发中不可或缺的一部分,尤其在面试环节,掌握JavaScript的核心知识点至关重要。本文将深入探讨JavaScript面试中常见的语法和类型、数据结构和类型等方面的知识。 首先,我们关注语法和类型。在...
- **概念理解**:闭包是指有权访问另一函数作用域内的变量的函数,创建闭包最常见的方式就是在一个函数内部创建另一个函数。 - **实践应用**:闭包常用于封装私有变量和方法,实现模块化编程。 **3. 排序算法举例并...
* JavaScript的函数基本概念,包括函数的声明、调用、参数和返回值等 * JavaScript的数组、字符串、异常处理、this关键字等概念 JavaScript高级实战 * 浏览器对象模型、文档对象模型、事件处理等概念 * 滚动类效果...
闭包是JavaScript的核心概念之一,指的是函数和声明该函数的词法环境的组合。通过闭包,函数可以访问到函数外部的变量。闭包的典型应用场景包括模块化封装、数据封装以及函数式编程。实现闭包主要有两种方式,一种...
- JavaScript高级特性:作用域、作用域链、闭包、原型和原型链、this指向、事件循环机制、异步编程(包括promise、async/await)等。 Vue相关知识点: - Vue基础:了解Vue的基本指令、实例的属性和方法、实例生命...
11. 前端开发面试知识点大纲:这一部分总结了前端工程师需要掌握的包括HTML、CSS、JavaScript、Node.js、JSON、AJAX、HTTP、安全、正则表达式、优化、重构、响应式设计、移动端开发、团队协作、代码维护、搜索引擎...
4. 函数:函数声明、函数表达式、箭头函数的区别,以及作用域、闭包、this的概念。 三、对象与数组 1. 对象:创建、访问属性的方法,以及对象的浅拷贝和深拷贝。 2. 属性操作:getter和setter的运用,以及Object....