JavaScript一些重要知识点结合题目的表现!
function Foo() { //① 声明一个Foo的函数
getName = function () { alert (1); };
return this;
}
Foo.getName = function () { alert (2);}; ② 为Foo创建一个叫getName的静态属性存储一个匿名函数
Foo.prototype.getName = function () { alert (3);}; ③为Foo的原型对象创建一个叫getName的匿名函数
var getName = function () { alert (4);}; ④通过表达式创建一个getName的函数
function getName() { alert (5);} ⑤声明一个叫getName的函数
① Foo.getName(); //2 直接访问Foo函数上存储的静态属性 2
② getName(); //4
③ Foo().getName(); //1
④ getName(); //1
⑤ new Foo.getName(); //2
⑥ new Foo().getName();
⑦ new new Foo().getName();
科普一下静态属性和静态方法;
function Myobject(){
this.instanceProp="456"; // 实例属性instanceProp
this.instanceMethod=function(){}; //实例方法instanceMethod
}
Myobject.prototype.protoProp="789";
Myobject.prototype.protoMethod=function(){
};
Myobject.staticProp="123"; //这样子添加的属性static就叫做静态属性
Myobject.staticMethod =function(){ //这样添加的方法staticMethod就叫做静态方法
};
var myobject=new Myobject();
以上属性和方法都是依赖于对象,JS中都是对象,函数也是对象
为一个函数的原型对象赋值后就会存在,
以这个函数为构造函数创建的实例对象能够访问到原型的属性及方法
第一问知识点:
- 调用公有方法,公有属性,我们必需先实例化对象,也就是用new操作符实化对象,就可构造函数实例化对象的方法和属性,并且公有方法是不能调用私有方法和静态方法的
- 静态方法和静态属性就是我们无需实例化就可以调用
- 而对象的私有方法和属性,外部是不可以访问的
第二问知识点:
- JavaScript 解释器中存在一种变量声明被提升的机制,也就是说函数声明会被提升到作用域的最前面,即使写代码的时候是写在最后面,也还是会被提升至最前面。
- 而用函数表达式创建的函数是在运行时进行赋值,且要等到表达式赋值完成后才能调用
Javascript中函数声明和函数表达式是存在区别的,函数声明在JS解析时进行函数提升,因此在同一个作用域内,不管函数声明在哪里定义,该函数都可以进行调用。而函数表达式的值是在JS运行时确定,并且在表达式赋值完成后,该函数才能调用。
第三问知识点:
Foo().getName();先执行了Foo函数,然后调用Foo函数的返回值对象的getName属性函数。
执行Foo函数的时候,由于里面是一句赋值语句;(没有var声明);先向Foo函数作用域里面寻找getName变量,没有找到;所以向函数的作用域上层寻找是否有getName变量;其实是第④行表达式声明的函数;此时再在函数里面赋值为function(){alert(1);},之后Foo函数返回是this,调用的时候指向他本身。所已此时的答案为1;
知识点 : this指向、函数表达式声明提前,作用域;
第四问知识点: ps:直接调用 getName函数 相对于window.getName();这个变量已经被Foo函数执行时给修改了;所以与第三问相同;
第五问知识点 :
打点.访问的优先级高于new()无参数运算符 参考运算符优先级https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Operator_Precedence
第六问和第七问都是实例化对象,然后调用实例化对象的方法;所以得到3
原文链接:https://juejin.im/entry/58db95eaac502e0058f8472e?from=timeline
JavaScript一些重要知识点结合题目的表现!的更多相关文章
- javascript数组的知识点讲解
javascript数组的知识点讲解 阅读目录 数组的基本方法如下 concat() join() pop() push() reverse() shift() sort() splice() toS ...
- JavaScript语言基础知识点图示(转)
一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运算符 4.JavaScript 数组 5.Ja ...
- JavaScript 语言基础知识点总结
网上找到的一份JavaScript 语言基础知识点总结,还不错,挺全面的. (来自:http://t.cn/zjbXMmi @刘巍峰 分享 )
- JavaScript语言基础知识点图示
原文:JavaScript语言基础知识点图示 一位牛人归纳的JavaScript 语言基础知识点图示. 1.JavaScript 数据类型 2.JavaScript 变量 3.Javascript 运 ...
- 《JavaScript 模式》知识点小抄本(下)
介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...
- 《JavaScript 模式》知识点小抄本(上)
介绍 最近开始给自己每周订个学习任务,学习结果反馈为一篇文章的输出,做好学习记录. 这一周(02.25-03.03)我定的目标是<JavaScript 模式>的第七章学习一遍,学习结果的反 ...
- JavaScript易错知识点
JavaScript易错知识点整理1.变量作用域上方的函数作用域中声明并赋值了a,且在console之上,所以遵循就近原则输出a等于2. 上方的函数作用域中虽然声明并赋值了a,但位于console之下 ...
- javascript基础入门知识点整理
学习目标: - 掌握编程的基本思维 - 掌握编程的基本语法 typora-copy-images-to: media JavaScript基础 HTML和CSS 京东 课前娱乐 众人皆笑我疯癫,我笑尔 ...
- JavaScript易错知识点整理
前言 本文是我学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,函数参数,闭包问题及对象拷贝与赋值这6个方面进行由浅入深的介绍和讲解,其中也涉及了一 ...
随机推荐
- ob-页面静态化(1)
$page = $_GET['page'] ?? 1; $filename = 'list_' . $page . '.html'; ////判断有没有静态页面,有的话直接读取静态页面,没有的话,连接 ...
- java的三大特性----封装、集成、多态
当我们被问到你对java的封装.继承.多态是什么看法的时候,你会想到什么? 想到的会不会是封装就是将类的成员属性用privet修饰一下,达到私有化的目的,只暴露方法,从而达到成员变量私有化的目的. 而 ...
- 微信小程序 app.js globalData 赋值报错
//success方法要用用success: res => {}的格式 success: res => { } //赋值报错 success:function(e){ } //报错内容: ...
- LOTO新型号支持串口蓝牙示波器
LOTO串口/蓝牙示波器面世 LOTO一直专注在虚拟示波器领域,以USB虚拟示波器为基础,扩展了很多功能模块,可以把Windows示波器,信号源,逻辑分析仪,频谱分析,数据记录,安卓手机平板支持,隔离 ...
- vue中使用js-cookie插件
js-cookie是一个用于处理 cookie 的简单.轻量级 JavaScript API,官方文档:https://www.npmjs.com/package/js-cookie. 一.安装 np ...
- ASP.NET Core 6框架揭秘实例演示[24]:中间件的多种定义方式
ASP.NET Core的请求处理管道由一个服务器和一组中间件组成,位于 "龙头" 的服务器负责请求的监听.接收.分发和最终的响应,针对请求的处理由后续的中间件来完成.中间件最终体 ...
- MATLAB绘制三角网及三维网线
今天博主给大家介绍一些比较常见的可视化操作,绘制三角网及三维网线. 三角网是由一系列连续三角形构成的网状的平面控制图形,是三角测量中布设连续三角形的两种主要扩展形式,同时向各方向扩展而构成网状,优点为 ...
- 前端面试题(js)
js 基础面试题 css 面试题 js 面试题 JavaScript 有几种类型的值?,你能画一下他们的内存图吗 原始数据类型(Undefined,Null,Boolean,Number.String ...
- path()和re_path()用法&区别
path() 参数列表: 参数1:字符串类型,用来匹配请求路径 参数2:指定路径所对应的视图函数名 参数3:关键字参数 实际用的不多 参数4... # urls.py # 创建子应用的路由文件 fro ...
- 搭建nuget服务器(二):制作nuget包
生成nuget包可以使用nuget.exe或者下载nuget package explorer工具 nuget package explorer 下载地址:https://github.com/NuG ...