第一部分:Object Prototypes (对象原型)

(1)定义一个方法,要求传入一个string类型的参数,然后将string的每个字符间加个空格返回,例如:

spacify('hello world') // => 'h e l l o  w o r l d' 

实现方案:

function spacify(string){
return string.split('').join(' ');
}
console.log(spacify('hello world')); //h e l l o w o r l d

(2)如何把(1)中定义的方法放入String对象的前面调用,例如:

'hello world'.spacify();

这里主要考察对function prototypes(方法原型)的理解,将此方法添加到String对象的原型上:

String.prototype.spacify = function(){
return this.split('').join(' ');
};
console.log('hello world'.spacify()); //h e l l o w o r l d

拓展考点:解释一下函数声明和函数表达式的区别

  对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析,所以在实际中,它们还是会有差异的,具体表现在,当使用函数声明的形式来定义函数时,可将调用语句写在函数声明之前,而后者,这样做的话会报错。

第二部分:参数 arguments

(1)先说说自己对参数(arguments)对象的理解。

  arguments 对象只是与数组类似(它并不是Array 的实例),具有length属性用来检测传递参数的个数。 函数arguments对象

(2)定义一个未定义的log方法,用来代理处理console.log方法。

log('hello world')

容易想到的方法:

function log(msg) {
console.log(msg);
}

如果要求改变调用log的方式,传入多个参数,并且传入参数的个数是不定得,这里需要使用apply方法。解释一下apply和call的区别(接收参数形式的不同)。

function log(){
console.log.apply(console, arguments);
}
log('hello', 'world','beijing', 1); //hello world beijing 1

(3)给每一个log消息添加一个"(app)"的前辍,比如:

'(app) hello world'

arugments是一个伪数组,需要将他转化成为标准数组。通常方法是使用Array.prototype.slice方法。

function log(){
var args = [].slice.call(arguments); //[] 等价于 Array.prototype
args.unshift('(app)');
console.log.apply(console, args); //apply方法可以接收数组作为参数
}
log('hello', 'world'); //(app) hello world

第三部分:上下文和this

(1)给出以下例子,注意count属性不是只读取当前上下文的。求出以下的输出结果。

var User = {
count: 1, getCount: function() {
return this.count;
}
};
console.log(User.getCount()); //

var func = User.getCount;
console.log(func()); //undefined

下面一个得出undefined的原因是func是在winodw的上下文中被执行的,所以会访问不到count属性。

(2)怎么样保证User总是能访问到func的上下文,即返回正即的值:1

应该使用Function.prototype.bind方法,例如:

var func = User.getCount.bind(User);
console.log(func()); //

但是bind方法对老版本的浏览器不起作用时怎么去解决?有没有替代方法。

Function.prototype.bind = Function.prototype.bind || function(context){
var self = this; return function(){
return self.apply(context, arguments);
};
}

参考来源: 如何面试前端工程师:GitHub 很重要

一些js面试高频知识点的总结的更多相关文章

  1. 「面试高频」二叉搜索树&双指针&贪心 算法题指北

    本文将覆盖 「字符串处理」 + 「动态规划」 方面的面试算法题,文中我将给出: 面试中的题目 解题的思路 特定问题的技巧和注意事项 考察的知识点及其概念 详细的代码和解析 开始之前,我们先看下会有哪些 ...

  2. 面试高频题:说一说对Spring和SpringMvc父子容器的理解?

    引言 以前写了几篇关于SpringBoot的文章<面试高频题:springBoot自动装配的原理你能说出来吗>.<保姆级教程,手把手教你实现一个SpringBoot的starter& ...

  3. Java后端高频知识点学习笔记1---Java基础

    Java后端高频知识点学习笔记1---Java基础 参考地址:牛_客_网 https://www.nowcoder.com/discuss/819297 1.重载和重写的区别 重载:同一类中多个同名方 ...

  4. js进阶 9 js操作表单知识点总结

    js进阶 9 js操作表单知识点总结 一.总结 一句话总结:熟记较常用的知识点,对于一些不太常用的知识点可以在使用的时候查阅相关资料,在使用和练习中去记忆. 1.表单中学到的元素的两个对象集合石什么? ...

  5. node.js 需要注意知识点

    复习node.js 需要注意知识点--(重点) 2.1:参数传递获取造型 客户端脚手架(发)    (参数传递)    node.js(收) -发ajax  this.axios.get(" ...

  6. C++面试高频题

    作者:守望者1028链接:https://www.nowcoder.com/discuss/55353来源:牛客网 面试高频题: 校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我也忘记了 ...

  7. HTML&CSS面试高频考点(二)

    HTML&CSS面试高频考点(一)    ♥ 6. W3C盒模型与怪异盒模型 标准盒模型(W3C标准) 怪异盒模型(IE标准) 怪异盒模型下盒子的大小=width(content + bord ...

  8. js 面试知识点

    基础           原型  原型链 作用域  闭包 异步  单线程 JS API        DOM操作 AJAX 事件绑定 开发环境    版本管理 模块化 打包工具 运行环境    页面渲 ...

  9. js基础面试高频面点1:变量提升

    一.什么是变量提升?var变量提升的底层原理是什么? 变量提升的定义:所有变量的声明语句都会被提升到代码头部,这就是变量提升. 原理:引擎在读取js代码的过程中,分为两步,专业来说代码运行是分为预处理 ...

随机推荐

  1. hdu5952 Counting Cliques 技巧dfs

    题意:一个有N个点M条边的图,球其中由S个点构成的团的个数.一个团是一个完全子图. 没有什么好办法,只有暴力深搜,但是这里有一个神奇的操作:将无向图转为有向图:当两个点编号u<v时才有边u-&g ...

  2. vc 获取窗口标题GetWindowText

    今天在写一个模块,具体功能是想时刻监控用户当前活动窗口,需要获取窗口标题以及其它相关信息,记得API GetWindowText就是用来做这个的,结果试了半天,有的获取成功了有的获取失败了,而且有关汉 ...

  3. server端并发聊天

    mul_server和mul_client实现了客户端发什么消息,服务器端回复什么消息 server_dialog和mul_client实现了客户端与服务器并发通信

  4. 容斥原理——hdu1796

    /* 遇到这种题一般用dfs,枚举起点来做 但是本题如何进行容斥? 比如以x为起点,第一步dfs到y,那么因子有lcm(x,y)的 所有数要被减掉(容斥中偶数是减法) 然后第二步dfs到z,那么因子有 ...

  5. echarts高级

    常用,待续... ♣tooltip自动轮播 ♣ 实现数据自动轮播 原理:其实就是timeline,获取某几段(时间)的数据,然后隐藏timeline ♣ legend自动轮播 ♣ 左侧多字出省略号 f ...

  6. WebLogic使用总结(二)——WebLogic卸载[转]

    一.WebLogic 12c的卸载 WebLogic的卸载是非常容易的,找到WebLogic的卸载程序,如下图所示:

  7. 最棒的7种R语言数据可视化

    最棒的7种R语言数据可视化 随着数据量不断增加,抛开可视化技术讲故事是不可能的.数据可视化是一门将数字转化为有用知识的艺术. R语言编程提供一套建立可视化和展现数据的内置函数和库,让你学习这门艺术.在 ...

  8. disruptor 高效队列

    disruptor 是什么: disruptor 是一个 低延时的 无锁 环形 队列.  相较于 java的 队列 ,他有明显的优点  ,无界,无锁,低延时(解决了为内存共享问题 ) disrupto ...

  9. Spring MVC(七)--传递JSON参数

    有时候参数的传递还需要更多的参数,比如一个获取用户信息的请求中既有用户ID等基本参数,还要求对查询结果进行分页,针对这种场景,一般都会将分页参数封装成一个对象,然后将它和基本参数一起传给控制器,为了控 ...

  10. linux命令快速手记 — 让手指跟上思考的速度(四)

    pm2 list:列出pm2方式启动的所有程序 pm2 monit:显示每个应用程序的CPU和内存占用情况 scp:远程复制和本地上传,适用于本地ssh登录到远程服务器 scp root@10.10. ...