第一部分: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. Element-ui之修改样式

    修改样式的方法 官网上面介绍了几种方法: 当然还有其他的方法,比如: 直接在标签上面采用行内式: 在组件中的style里面添加样式: 引入.scss文件(注意:如果是公用样式最好在index.scss ...

  2. 使用Ajax获取多选框用户选择的值问题

    目录 说明 正文 说明 在web开发过程中,将多选框的值提交到django后台,有两种提交方式: form表单提交 ajax异步提交 我需要使用ajax将复选框的值提交到后台,记录一下当时碰到的问题 ...

  3. Consul 安装的与启动

    1.下载地址:https://www.consul.io/downloads.html linux 下载地址: wget https://releases.hashicorp.com/consul/0 ...

  4. Quartz:Quartz

    ylbtech-Quartz:Quartz Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Qu ...

  5. iOS开发之IMP和SEL(方法和类的反射)

    1.SEL:类方法的指针,相当于一种编号,区别与IMP! IMP:函数指针,保存了方法的地址! SEL是通过表取对应关系的IMP,进行方法的调用! 2.获取SEL和IMP方法和调用: SEL meth ...

  6. 02_Hibernate持久化配置

    一.hibernate对象持久化 Web开发的分层: 为了把数据访问细节和业务逻辑分开, 一般把数据访问作为单独的持久化层.DAO是数据访问对象,使用hibernate后,数据访问对象中操作的API将 ...

  7. java基础之BigInteger

    BigInteger类概述可以让超过Integer范围内的数据进行运算 构造方法 public BigInteger(String val) 成员方法: public BigInteger add(B ...

  8. java基础之final关键字

    final: 意为终态.在java中得注意以下四点: 1.final是一个修饰符,可修饰变量,方法,类. 2.final修饰子类不可以被继承. 3.final修饰的方法不可以被重写(覆盖) 4.对于一 ...

  9. 使用RequestsCookieJar自动保存并传递cookie

    使用python的requests开发爬虫程序的时候,经常需要将之前请求返回的cookie值作为下一个请求的cookie进行调用,比如模拟登录之后的返回的sessionID,就是需要作为后续请求的co ...

  10. NoSQL 列族数据库