面向对象程序设计(Object-oriented programming,OOP)
来源:互联网 发布:网络审核员天河 编辑:程序博客网 时间:2024/05/22 14:22
面向对象程序设计(Object-oriented programming,OOP)
特征:封装/继承/多态/抽象
JavaScript 开发进阶:理解 JavaScript 作用域和作用域链
js只有2种作用域
局部
全局
ES6: let 块级作用域
- 如果在块中,没有var声明,都会自动提升为全局变量
- 局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部
作用域链(Scope Chain)
总结:
每一个Execution Context(运行期上下文)中都有一个VO(variable object),用来存放变量,函数和参数等信息。
在JavaScript代码运行中,所有用到的变量都需要去当前(activition object)AO/VO中查找,当找不到的时候,就会继续查找上层Execution Context中的AO/VO。这样一级级向上查找的过程,就是所有Execution Context中的AO/VO组成了一个作用域链。
所以说,作用域链与一个执行上下文相关,是内部上下文所有变量对象(包括父变量对象)的列表,用于变量查询(作用)。Scope = VO/AO + All Parent VO/AOs
作者: GD_SeHun
链接:http://www.imooc.com/article/3009
来源:慕课网
demo:var x = 10; function foo() { var y = 20; function bar() { var z = 30; console.log(x + y + z); }; bar() }; foo();//函数bar可以直接访问"z",然后通过作用域链访问上层的"x"和"y"。
如果一个跨作用域的对象被引用了一次以上,则先把它存储到局部变量里再使用。
结合作用域链看闭包
prototype:是函数对象上预设的对象属性
_proto_:对象上的原型
function Person(name,age){ this.name = name; //this 指向 person.prototype this.age = age;}
创建函数实例时,对象的原型会指向对象的prototype值。
Person.prototype.hi = function(){
console.log(this.name+” “+this.age);
}
Person.prototype.walk = function(){
console.log(this.name+” is walking… “);
}
function Student(name,age,className){ Person.call(this,name,age); this.className = className;}
补充:
call方法:
语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定义:调用一个对象的一个方法,以另一个对象替换当前对象。
说明:
call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。
如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。apply方法:
语法:apply([thisObj[,argArray]])
定义:
应用某一对象的一个方法,用另一个对象替换当前对象。
说明:如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。
如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。
Student方法继承person.prototype:
Student.prototype = Object.create(Person.prototype);//Object.create:创建一个空对象(这里的空对象是Student.prototype),对象原型指向Person.prototype数,既可以查找到person的方法,又可以在创建Student.prototype方法的同时不影响Person.prototypeStudent.prototype.constructor = Student;//不设置会指向Person
Student.prototype.hi覆盖hi方法,原型链向上查找
Student.prototype.hi = function(){
console.log(this.name+” “+this.age);
}
一旦基础数据类型调用了 方法 或者 属性 都会包装成为 对象
持续补充..
作用域参考网站:
http://www.cnblogs.com/lhb25/archive/2011/09/06/javascript-scope-chain.html
- OOP(Object Oriented Programming 面向对象程序设计)
- 面向对象程序设计(OOP-Object Oriented Programming)
- 面向对象程序设计(Object-oriented programming,OOP)
- OOP =Object Oriented Programming,=面向对象的程序设计
- 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)
- 面向对象编程OOP(Object Oriented Programming)
- (OOP:Object Oriented Programming)面向对象
- 面向对象编程(Object-oriented programming,OOP)
- 面向对象编程(OOP)Object Oriented Programming
- 面向对象的程序设计(Object Oriented Programming)之一-----封装
- Javascript高级程序设计第二版第六章--面向对象程序设计(Object-Oriented Programming)简称OOP编程--笔记
- 关于OOP(Object Oriented Programming/面向对象编程)的理解
- 面向对象编程(Object-Oriented Programming)
- php面对对象oop(object-oriented Programming)
- OOP:Object Oriented Programming
- object-oriented programming (OOP)
- Object Oriented Programming(OOP)
- 面向对象的程序设计(Object Oriented Programming)之一-----封装(续)
- java使用反射机制根据属性名获取object对象指定属性的值
- java Swing之JTabbedPane用法实例 & JTable用法实例
- <img>标签,显示服务器图片
- iOS11中的定位授权
- Nginx Learing
- 面向对象程序设计(Object-oriented programming,OOP)
- React native与phoneGap jquery mobile
- Andrew Ng笔记-week2
- kuangbin KMP G题
- int.class和Integer.class有何不同?
- 尝试Adam代替梯度下降
- OpenStack通过Restful api获取token
- 期货多品种多策略多周期组合
- oracle create tablespaces and create user ---cxl