首页 > 编程语言 > 详细

整理JavaScript高级基础知识

时间:2018-09-22 00:18:48      阅读:208      评论:0      收藏:0      [点我收藏+]

整理JavaScript高级基础知识

因为空余时间很多..所以博客更新频率得相对频繁些..


原型以及原型链

考察原型以及原型链:

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

this

考察 this:

function fn(){
    console.log(this)
}
new fn()

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

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


JSON

考察JSON

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

他们的关系:

JSON 是在某一些方面借鉴了JavaScript的一种轻量级的数据交换格式,是一门新语言。

除了 JavaScript 基本数据类型中的 undefined 、symbol,复杂类型中的 function,其他的数据类型在 JSON 中都有。

他们的区别有:

JSON 中的字符串必须用双引号括起,JavaScript 中字符串单双引号都可以;

JSON 中没有变量,所以不能引用,JavaScript中有变量,可以引用;

JSON 中没有原型链,JavaScript有原型链;


MVC

前端 MVC 是什么?

请用代码大概说明 MVC 三个对象分别有哪些重要属性和方法。

前端MVC是什么

MVC 是一种代码组织形式,他把代码依据功能的不同划分成三个部分,分别是Model、Controller、View。

View代表视图

Model代表对数据的操作(存储和获取等)

Controller代表了View和Model两者之间的交互逻辑以及其他。

他们之间的相互作用是这样的:

用户对View视图做出了操作,监听着View视图的controller接收到了View的变化通知,然后按需求去调用Model,Model向server发出请求;server返回响应给Model,Model返回数据给Controller,Controller根据接收到的数据更新View视图。

代码示例

View 主要接受一个选择器,获取需要监听的区域,然后返回一个对象给 controller 操作、更新:

window.View = function(selector){
    return this.document.querySelector(selector)
}

Model 主要负责数据库的初始化、数据的存储和获取,所以他的重要属性应该要要有 init 、fetch 、save:

window.Model = function(options){
    //通过传入参数获取需要操作数据库
    var resourceName = options.resourceName
    return {
        //初始化数据库
        init:function(){},

        //获取数据:
        fetch:function(){},

        //保存数据
        save:function(){}
        }
}

Controller 负责监听和更新 view,调用 model ,接受操作 model 返回的数据,所以他要有一个 init 接收传入的 view 和 model ,负责 model 的调用 和 执行绑定事件函数 bindEvents():

window.Controller = function(options){

    var init = options.init

    var object = {
        view:null,
        model:null,
        init:function(view,model){
            this.view = view
            this.model = model
            this.model.init()
            init.call(this,view,model)
            this.bindEvents.call(this)
        },
    }

    //通过遍历传入的参数  加入函数到object 中,处理其它事务
    for(let key in options){
        if(key !== "init"){
            object[key]=options[key]
        }
    }
    return object
}

在 ES5 中如何用函数模拟一个类?

考察面向对象编程:

function Human(id,hp){
    this.id = id
    this.hp = hp
}
Human.prototype = {
    constructor:Human,
    walk:function(){ /**/ } ,
    species:function(){ /**/ } ,
    useTools:function(){ /**/ } ,
}

Promise

考察 Promise 的用法:

用过 Promise 吗?举例说明。

有,在使用 leanCloud 数据库的时候,我通过调用一个 leanCloud 的 API :fetch 函数获取数据库的数据,这个函数被调用后,返回一个 Promise 对象;这个 Promise 对象有一个 then 属性,他接受两个回调函数作为参数,一旦数据获取成功(resolve),则把数据传入 then 后的第一个函数,对数据进行相对操作;如果数据获取失败(reject),则执行第二个函数。

如果要你创建一个返回 Promise 对象的函数,你会怎么写?举例说明。

function promise(){
    return new Promise((resolve,reject) => {
        console.log(‘this\‘s Promise begin‘)
        resolve(10)
    })
}
promise().then((value)=>{
    console.log(value)
    console.log(‘that\‘s Promise end‘)
})

整理JavaScript高级基础知识

原文:https://www.cnblogs.com/No-harm/p/9688729.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!