Js作用域&作用域链
js构建类
一 构建类的原则
构造函数 等于 原型的constructor
//构造函数
function Hero(name,skill){
this.name = name;
this.skill = skill;
}
//原型
Hero.prototype;
//构造函数 === 原型的constructor
Hero === Hero.prototype.constructor; //=>true
//实例均继承原型
二构建类的方法:
1.直接使用构造方法
该方法创建实例会将内容给每个类都创建一份
//实例属性方法都声明在构造器里
function Hero(name,skill){
this.name = name;
this.skill = skill;
this.sayHello = function(){
console.log(this.name + ";" + this.skill);
}
}
//类静态常量
Hero.common = '都有特别的事迹';
//类静态方法
Hero.doSomething = function(){
console.log('doSomething');
}
var saber = new Hero ('Saber','Excalibur');
saber.sayHello();
var archer = new Hero('Archer','Unlimit Blade Work');
archer.sayHello();
//此处为每个对象都拷贝了一份sayHello 方法 会浪费内存空间
saber.sayHello == archer.sayHello;//=>false
2.优化构造器方法--将方法函数移到构造器的prototype
- 每个实例都会有一个
__proto__
属性指向构造函数的prototype - 这样每个实例在当前找不到方法后会到prototype寻找该方法
- 能避免之前出现的拷贝多个方法的情况
2.1扩展prototype
使用扩展的方式实现类方法,不用从新声明 constructor函数,因为默认值就是构造函数本身
//实例属性方法都声明在构造器里
function Hero(name,skill){
this.name = name;
this.skill = skill;
}
Hero.prototype.sayHello = function(){
console.log(this.name + ";" + this.skill);
}
//类静态常量
Hero.common = '都有特别的事迹';
//类静态方法
Hero.doSomething = function(){
console.log('doSomething');
}
var saber = new Hero ('Saber','Excalibur');
saber.sayHello();
var archer = new Hero('Archer','Unlimit Blade Work');
archer.sayHello();
saber.sayHello == archer.sayHello;//=>true
2.2重写prototype
//实例属性方法都声明在构造器里
function Hero(name,skill){
this.name = name;
this.skill = skill;
}
Hero.prototype = {
//保持 构造函数 等于 原型的constructor
constructor:Hero,
sayHello:function(){
console.log(this.name + ";" + this.skill);
}
}
//类静态常量
Hero.common = '都有特别的事迹';
//类静态方法
Hero.doSomething = function(){
console.log('doSomething');
}
Js作用域&作用域链的更多相关文章
- JS 之作用域链和闭包
1.JS无块级作用域 <script> function Main(){ if (1==1){ var name = "alex"; } console.log(nam ...
- JS的作用域链与原型链
来一波,好记性不如烂笔头. 这两条链子可是很重要的. 作用域链 当执行一段JS代码(全局代码或函数)时,JS引擎会创建为其创建一个作用域又称为执行上下文(Execution Context),在页面加 ...
- js的作用域与作用域链
JavaScript的作用域和作用域链.在初学JavaScript时,觉得它就和其他语言没啥区别,尤其是作用域这块,想当然的以为“全局变量就是在整个程序的任何地方都可以访问,也就是写在函数外的变量,局 ...
- js中作用域链的问题
为什么没有var声明的变量是全局的? 是因为,在js中,如果某个变量没有var声明,会自动到上一层作用域中去找这个变量的声明语句,如果找到,就使用,如果没有找到,继续向上查找,一直查找到全局作用域为止 ...
- JS的作用域链与this指向
JS的作用域链是在函数创建时创建的.而this对象是在函数运行期间绑定的. 下面看几个例子,说明JS的作用域链和this是两套分离的链. 1) var name = 'window下的name< ...
- js词法作用域规则
function foo() {console.log( a ); // 2不是3} function bar() {var a = 3;foo();} var a = 2;bar(); js中的作用 ...
- js词法作用域
作用域链和原型链是JS中比较重要的2个概念, JS的是函数作用域,与C之类语言的块级作用域不同 JS的作用域还是词法作用域,或者叫静态作用域,作用域链是在语法解析时就完成的,而不是在执行时创建. 例子 ...
- JS 函数作用域及变量提升那些事!
虽然看了多次js函数作用域及变量提升的理论知识,但小编也是一知半解~ 这几天做了几道js小题,对这部分进行了从新的理解,还是有所收获的~ 主要参考书籍: <你不知道的JavaScript(上卷) ...
- JavaScript函数之作用域 / 作用链域 / 预解析
关于作用域和作用链域的问题,很多文章讲的都很详细,本文属于摘录自己觉得对自己有价值的部分,留由后用,仅供参考,需要查看详细信息请点击我给出的原文链接查看原文件 做一个有爱的搬运工~~ -------- ...
- js 函数 作用域 全局作用域 局部作用域 闭包
一个变量没有声明但调用 直接报错,声明没有赋值会显示未定义. 作用域 作用域(scope):一条数据可以在哪个范围中使用. 通常来说,一段程序代码中所用到的数据并不总是有效/可用的,而限定这个数据的可 ...
随机推荐
- 华为ensp模拟某公司网络架构及配置详解
1.先晒下架构图,二层设备省略..... 2.下面开始具体配置详解 2.1.从路由器开始配置,先用远程工具远程AR1220F-S路由,secureCRT ,putty,xshell任选其中一个均可,功 ...
- Swift和Javascript的神奇魔法
Swift和Javascript的神奇魔法 记录Swift和Javascript如何进行交互 前言 今天在网上看到了一篇介绍Swift和Javascript交互的文章,感觉作者写的很好,因此把作者文章 ...
- Akka(2):Actor生命周期管理 - 监控和监视
在开始讨论Akka中对Actor的生命周期管理前,我们先探讨一下所谓的Actor编程模式.对比起我们习惯的行令式(imperative)编程模式,Actor编程模式更接近现实中的应用场景和功能测试模式 ...
- web聊天室总结
前言: 最近在写一个聊天室的项目,前端写了挺多的JS(function),导致有点懵比,出了BUG,也迟迟找不到.所以昨天把写过的代码总结了一下,写成博客. 项目背景 参考博客: http://www ...
- git底层原理(二)
git对象模型 在git系统中有四种类型的对象,所有的Git操作都是基于这四种类型的对象:"blob":这种对象用来保存文件的内容."tree":可以理解成一个 ...
- 在node.js中如何屏蔽掉favicon.ico的请求
今天准备用node做个api出来,还没入门,遇到一个小问题,特在此记录一下! 在做路由模块的时候,发现控制台每次都会多输出一条favicon.ico的请求,对于这种又占资源,看着又碍眼的玩意,强迫症完 ...
- RabbitMQ系列教程之二:工作队列(Work Queues)
今天开始RabbitMQ教程的第二讲,废话不多说,直接进入话题. (使用.NET 客户端 进行事例演示) 在第一个教程中,我们编写了一个从命名队列中发送和接收消息的程序. ...
- IBM WebSphere ESB入门指南
[TOC] 第一章 ESB介绍 本博客介绍一款ESB产品,IBM WebSphere ESB.ESB(Enterprise Service Bus)也即企业服务总线.ESB有很多产品,IBM的IBM ...
- [Leetcode] Binary search--275 H-Index
Follow up for H-Index: What if the citations array is sorted in ascending order? Could you optimize ...
- Python的核心数据结构
数据结构 例子 数字 1234,3.1415,3+4j 字符串 'spam'."grace's" 列表 [1,[2,'three'],4] 字典 {'food':'spam','t ...