第一部分: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. 小程序跳转传参参数值为url时参数丢失

    通过先encodeURIComponent,取到值以后再decodeURIComponent,拼接参数正常传递 A页面 switch: function (e) { var aa = 'UNNZVUf ...

  2. unordered_map

    #include <iostream> #include <cstdio> #include <queue> #include <algorithm> ...

  3. 今天给各位介绍Linux touch命令详述

    触摸命令 touch命令有两个功能:一个是将现有文件的时间戳更新为系统的当前时间(默认模式),它们的数据将保持不变;第二个是创建一个新的空文件. 语法 触摸(可选) 最常见的用法:touch file ...

  4. 数论GCD——cf1055C

    被一道数论题卡了半天 网上的题解说只要匹配l或者r就行,想了下还真是.. 能让r1和r2对其就让他们对其,不能对其就讨论一下两种情况就可以了 #include <bits/stdc++.h> ...

  5. pyqt点击右上角关闭界面但是子线程仍在运行

    现象: 通过右上角的叉关闭图形界面后,程序运行的子线程却不会被自动关闭,依然留存在系统中原因: 子线程没有正确关闭解决方法: 1.将子线程设置成守护线程 self.your_thread = thre ...

  6. Hibernate 查询语言

    查询语言 Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性. HQL 查询被 Hibernate 翻译为传统的 SQL ...

  7. 力扣算法题—146LRU缓存机制

    [题目] 运用你所掌握的数据结构,设计和实现一个  LRU (最近最少使用) 缓存机制.它应该支持以下操作: 获取数据 get 和 写入数据 put . 获取数据 get(key) - 如果密钥 (k ...

  8. 《DSP using MATLAB》Problem 8.13

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  9. spring boot 中 rabbit mq基础例子

    1.先安装ELANG,再按照RabbitMQ 2.打开RabbitMQ控制台:rabbit command prompt 1.设置elang的路径:set ERLANG_HOME=D:\work_pr ...

  10. 05_springmvc参数绑定

    一.参数绑定的过程 从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上.springmvc中,接收页面提交的数据是通过方法形参来接收.而不 ...