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

  • 相关阅读:
    gdb remote 使用
    gdb调试的layout使用
    经典名言--教父
    GDB dump mem example和命令
    再谈音响的七个频段,个个是真理
    Ubuntu 16.04下GDB调试
    shell脚本中if的“-e,-d,-f”
    ubuntu下makeinfo安装,其实真正安装的是texinfo包
    【svn】svn的使用
    【linux】监控磁盘情况并自动删除备份文件
  • 原文地址:https://www.cnblogs.com/DZzzz/p/8866995.html
Copyright © 2011-2022 走看看