zoukankan      html  css  js  c++  java
  • js原型链,作用域,闭包讲解

    当面试的时候遇到问原型链,闭包,还有作用域,直接 拿张纸和笔把原型链画出来,闭包跟作用域直接用笔写几道题出来加深理解(因为我们是理科生,图形和题目以及控制台输出结果才是最直观的方法)

    问:什么是原型链?

    答:Javascript是面向对象的,每个实例对象都有一个__proto_属性,该属性指向它原型对象,这个实例对象的构造函数有一个原型属性prototype,与实例的__proto__属性指向同一个对象。当一个对象在查找一个属性的时,自身没有就会根据__proto__ 向它的原型进行查找,如果都没有,则向它的原型的原型继续查找,直到查到Object.prototype._proto_nul,这样也就形成了原型链。

    问:如何查找构造函数和原型中的属性?

    答:

    构造函数.prototype  查看构造函数的原型属性

    实例对象.__proto__ 查看实例对象的构造函数的原型

    实例对象.__proto__.constructor 查看实例对象的构造函数

    原型链见过最好的图片,不啰嗦

    体现在代码上:

    其实非常的简单

    栗如:

    我们可以先写一个构造函数,然后在它的prototype中写入方法,然后我们可以在入口函数中去写一个实例对象,用实例对象的方法去调用,这样子写代码可以做到逻辑清晰,代码简洁大方。

     1 var letao;
     2 $(function() {
     3     letao = new Letao();
     4     letao.login();
     5 });
     6 
     7 var Letao = function() {
     8 
     9 }
    10 
    11 Letao.prototype = {
    12     //登录函数
    13     login: function() {
    14         // 1. 获取登录的按钮添加点击事件
    15         $('.btn-login').on('click', function() {
    16             // 2. 获取输入的用户和密码
    17             var username = $('.mui-input-clear').val();
    18             var password = $('.mui-input-password').val();
    19             // 3. 验证用户名密码是否输入
    20             if (!username) {
    21                 // 第一个参数是提示内容 第二个参数是一个对象(提示框的设置) duration提示信息的长短  type 提示的标签类型 long short 和 数字
    22                 mui.toast('请输入用户名', { duration: 'long', type: 'div' })
    23                 return;
    24             }
    25             if (!password) {
    26                 // 第一个参数是提示内容 第二个参数是一个对象(提示框的设置) duration提示信息的长短  type 提示的标签类型 long short 和 数字
    27                 mui.toast('请输入密码', { duration: 'long', type: 'div' })
    28                 return;
    29             }
    30             // 4. 调用登录的API去验证是否登录成功
    31             $.ajax({
    32                 url: '/user/login',
    33                 data: { username: username, password: password },
    34                 type: 'post',
    35                 success: function(data) {
    36                     // 5. 判断返回的结果是否有错误
    37                     if (data.error) {
    38                             // 如果有错误把错误信息提示一下
    39                         mui.toast(data.message, { duration: 'long', type: 'div' })
    40                         return;
    41                     }else{
    42                             // 如果登录成功就跳转到个人中心页面
    43                             window.location.href = 'user.html';
    44                     }                    
    45                 }
    46             })
    47         })
    48     }
    49 }

     这个如果ti

     js作用域一步步透彻理解

    https://www.cnblogs.com/skylar/p/3986087.html

    在面试中,怎样能通俗易懂又不白痴的回答出面试官提出的js中闭包问题?

     https://www.zhihu.com/question/52491175

  • 相关阅读:
    无尽的冒险
    推荐一款好用的markdown编辑器,还可以引入vue主题
    你是微光
    Echarts 空心饼图示例
    vue + element-ui 制作tab切换(切换vue组件,踩坑总结)
    vue + element-ui 制作tab切换(适用于单页切换不同标记显示不同内容)
    Element UI 封装Table --> 实现动态创建表头和单元格数据(单元格内可动态增加非纯文本的内容)
    Element UI 封装Table --> 实现动态创建表头和单元格数据(无需写死表头和单元格数据)
    vue 部署到生产出现语法错误和css警告(Resource interpreted as Stylesheet but transferred with MIME type text/html: "www.aaa.com/cal/static/css/app.c06.css". vendor.4b6.js:1 Uncaught SyntaxError: Unexpected token '<')
    使用vue-cookies插件操作cookie
  • 原文地址:https://www.cnblogs.com/DZzzz/p/8866995.html
Copyright © 2011-2022 走看看