Grit的前端之路

JS高级基础知识总结

2019-03-05  本文已影响0人  Grit0821
  1. 填空题:
var object = {}
object.__proto__ ===  ????填空1????  // 为 true

var fn = function(){}
fn.__proto__ === ????填空2????  // 为 true
fn.__proto__.__proto__ === ????填空3???? // 为 true

var array = []
array.__proto__ === ????填空4???? // 为 true
array.__proto__.__proto__ === ????填空5???? // 为 true

Function.__proto__ === ????填空6???? // 为 true
Array.__proto__ === ????填空7???? // 为 true
Object.__proto__ === ????填空8???? // 为 true

true.__proto__ === ????填空9???? // 为 true

Function.prototype.__proto__ === ????填空10???? // 为 true

答案:

var object = {}
object.__proto__ ===  Object.prototype  // 为 true

var fn = function(){}
fn.__proto__ === Function.prototype  // 为 true
fn.__proto__.__proto__ === Object.prototype // 为 true

var array = []
array.__proto__ === Array.prototype // 为 true
array.__proto__.__proto__ ===Object.prototype // 为 true

Function.__proto__ ===Function.prototype// 为 true
Array.__proto__ === Function.prototype // 为 true
Object.__proto__ === Function.prototype // 为 true

true.__proto__ === Boolean.prototype // 为 true

Function.prototype.__proto__ ===  Object.prototype // 为 true
function fn(){
    console.log(this)
}
new fn()

new fn() 会执行 fn,并打印出 this,请问这个 this 有哪些属性?这个 this 的原型有哪些属性?


答案:
this 自身没有属性(只有一个隐藏的 __proto__属性)
this 的原型是fn.prototype,只有一个属性constructor,且 constructor === fn(另外还有一个隐藏属性__proto__,指向 Object.prototype

  1. JSON 和 JavaScript 是什么关系?
    JSON 和 JavaScript 的区别有哪些?

答案:
关系:JSON 是一门抄袭/借鉴 JavaScript 的语言,同时也是一种数据交互格式,JSON 是 JavaScript 的子集(或者说 JSON 只抄袭了一部分 JavaScript 语法,而且没有新增任何原创的语法)
区别:JSON 不支持函数、undefined、变量、引用、单引号字符串、对象的key不支持单引号也不支持不加引号、没有内置的 Date、Math、RegExp 等。

  1. 前端 MVC 是什么?
    请用代码大概说明 MVC 三个对象分别有哪些重要属性和方法。

答案:
MVC 是一种设计模式(或者软件架构),把系统分为三层:Model数据、View视图和Controller控制器。

var model = {
    data: null,
    init(){}
    fetch(){}
    save(){}
    update(){}
    delete(){}
}
view = {
    init() {}
    template: '<h1>hi</h1'>
}
controller = {
    view: null,
    model: null,
    init(view, model){
        this.view = view
        this.model = model
        this.bindEvents()
    }
    render(){
        this.view.querySelector('name').innerText = this.model.data.name
    },
    bindEvents(){}
}
  1. 在 ES5 中如何用函数模拟一个类?

答案:
ES 5 没有 class 关键字,所以只能使用函数来模拟类。

function Human(name){
    this.name = name
}
Human.prototype.run = function(){}

var person = new Human('frank')
  1. 用过 Promise 吗?举例说明。
    如果要你创建一个返回 Promise 对象的函数,你会怎么写?举例说明

答案:
用过 Promise,比如 jQuery 或者 axios 的 AJAX 功能,都返回的是 Promise 对象。

$.ajax({url:'/xxx', method:'get'}).then(success1, error1).then(success2, error2)

如果我自己创建 Promise 对象,我会这么写

function asyncMethod(){
    return new Promise(function (resolve, reject){
        setTimeout(function(){
            成功则调用 resolve
            失败则调用 reject
        },3000)
    })
}
上一篇 下一篇

猜你喜欢

热点阅读