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):一条数据可以在哪个范围中使用. 通常来说,一段程序代码中所用到的数据并不总是有效/可用的,而限定这个数据的可 ...
随机推荐
- JEESZ-kafka集群安装
1. 在根目录创建kafka文件夹(service1.service2.service3都创建) [root@localhost /]# mkdir kafka 2.通过Xshell上传文件到s ...
- VR全景是市场价值及前景
消费者视角痛点:比如酒店消费行业,很多消费者在预订酒店过程中,都遇到过这样的场景:网上照片里酒店房间看着宽敞明亮,格调不凡,感觉非常喜欢,等真正推开房门插上房卡一看,却大失所望.在酒店行业,网上照片和 ...
- 基于react的简单TODOList
前段时间看了下react,写个栗子记录 页面效果如下 效果:展示代办事件,正文加了删除线的是已经完成的,未加横杠的是未完成的, 交互:1.在input里面输入新添加的内容,点击Add按钮添加代办事件 ...
- WCF(远程服务器返回错误: 400 错误的请求)
类似相关问题有以下: WCF- restful接口 POST方式调用报错(远程服务器返回错误: 400 错误的请求) WCF Rest:不使用UriTemplate使用post方式传参解决HTTP40 ...
- Kotlin入门第三课:数据类型
前文链接: Kotlin学习第一课:从对比Java开始 Kotlin入门第二课:集合操作 初次尝试用Kotlin实现Android项目 Kotlin的数据类型与Java类似,因此这篇文章主要看Kotl ...
- 从Thread,ThreadPool,Task, 到async await 的基本使用方法解读
记得很久以前的一个面试场景: 面试官:说说你对JavaScript闭包的理解吧? 我:嗯,平时都是前端工程师在写JS,我们一般只管写后端代码. 面试官:你是后端程序员啊,好吧,那问问你多线程编程的问题 ...
- 每天一个JS 小demo之商品下架特效制作,主要知识点:定时器,倒计时,抖动特效。PS:由于不方便上传文件夹,只能上传效果图,图片等素材需自寻哟。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Python教程(2.7)——条件分支
像其它语言一样,Python也有条件分支. 例如,输入用户年龄,可能需要判断是否成年,并做出不同反应.这就需要用到条件分支. if条件分支 if条件分支的一般格式如下: if condition: s ...
- Eclipse导入项目常见问题----乱码问题03
有时打开导入的项目文件时,会出现如下图情况: 解决方法 如下图步骤所示: 此时,我们可以看到文件正常了 jdk版本问题(有个红色感叹号)01:http://blog.csdn.net/baidu_37 ...
- Dubbox中开发REST风格的远程调用
转载: http://zyg345646335.iteye.com/blog/2208899