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

 

 

posted @ 2018-04-17 15:28  Fanyee  阅读(2193)  评论(0编辑  收藏  举报