JavaScript中的面向对象及有关应用
面向对象(OOP:Object Oriented Programming)
面向对象的概念
面向对象是一种程序设计思想,将数据和处理数据的程序封装到对象中。
特性:抽象、继承、封装、多态。
优点:提高代码的复用性及可维护性。
对象
JavaScript是一种基于对象的语言,几乎所有东西都是对象。
对象的创建方法:
1.字面量创建
2.new Object()创建
3.Object.create()创建
<script>
//对象创建
//1.字面量方式
let obj = {
name:"张三",
age:"20",
hobby:function(){
console.log("喜欢篮球")
}
} //2.构造函数
let obj = new Object();
obj.name = "张三";
obj.age = 20;
obj.hobby = function{
console.log("喜欢篮球")
} //3.Object.create();属性方法放在原型上;
let obj = Object.create({
name:"张三",
age:"20",
hobby:function(){
console.log("喜欢篮球")
}
})
// 对象的调用
// console.log(obj.name);
// obj.hobby();
// console.log(obj['name']);
let str = "name";
// console.log(obj.str);
console.log(obj[str]);
</script>
工厂模式
工厂模式解决了代码复用的问题;
<script>
//工厂模式
function Person(name,age,hobby){
let obj = {} //添加原料
obj.name = name;
obj.age = age;
obj.hobby = function(){
console.log(hobby);
}
//加工原料 return obj; //出厂
} //例子
let zhangsan = Person("张三",20,"喜欢篮球");
let lisi = Person("李四",21,"喜欢足球");
console.log(zhangsan);
console.log(lisi); </script>
new运算符
new的特点:1.new执行函数 2.自动创建空对象; 3.this绑定到空对象;4 隐式返还this;
通过new来改造工厂模式
构造函数
约定俗成构造函数首字母大写
构造函数通过new来调用this指向实例化对象。
静态属性及方法
<script>
//构造函数
function Person(name){
this.name = name;
this.age = 20;
this.hobby(){
console.log("喜欢打篮球")
}
} //静态成员,属于Person,而不是实例化的对象。
Person.num = 0; //new : 实例化
let zhangsan = new Person("张三");
</script>
prototype原型(更节约性能)
通过new实例化出来的对象其属性和行为来自两个部分,一部分来自构造函数,另一部分来自原型。
一般在构造函数里写属性,在原型中写方法。
原型的固有属性constructor(可判断实例化对象的类型)
实例化的原型就是__proto__
<script>
//构造函数
function Person(name){
this.name = name;
this.age = 20;
// this.hobby = function(){
// console.log("喜欢篮球");
// }
} //功能空间原型;
Person.prototype.hobby = function(){
console.log("喜欢篮球");
}
Person.prototype.fn = function(){
console.log('fn');
}
//或者以下这种方式,但会覆盖之前的prototype
// Person.prototype = {
// constructor:Person,
// hobby:function(){
// console.log("hobby");
// }
// } //原型的固有属性;
console.log(Person.prototype.constructor===Person);
//实例化
let zhangsan = new Person("张三");
console.log(zhangsan.constructor===Person);
// console.log(zhangsan)
// console.log(zhangsan.__proto__===Person.prototype);
// let lisi = new Person("李四"); // console.log(zhangsan.hobby===lisi.hobby);
</script>
原型链
对象之间的继承关系,在JavaScript中是通过prototype对象指向父类对象,直到指向Object对象为止,这样就形成了一个原型指向的链条,称之为原型链;
1.当访问一个对象的属性或方法时,会先在对象自身上查找属性或方法是否存在,如果存在就使用对象自身的属性或方法。如果不存在就去创建对象的构造函数的原型对象中查找 ,依此类推,直到找到为止。如果到顶层对象中还找不到,则返回 undefined。
2.原型链最顶层为 Object 构造函数的 prototype 原型对象,给 Object.prototype 添加属性或方法可以被除 null 和 undefined 之外的所有数据类型对象使用。
面向对象的继承由下一篇文章介绍,将对ES5与ES6的继承进行对比。
JavaScript中的面向对象及有关应用的更多相关文章
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- 简单分析JavaScript中的面向对象
初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...
- 前端开发:面向对象与javascript中的面向对象实现(一)
前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...
- JavaScript从初见到热恋之深度讨论JavaScript中的面向对象。
JavaScript中的面向对象.面向对象的三个基本特征:封装.继承.多态. 1.封装 js的封装如下 定义Person类 function Person(name,age,sex) { this.n ...
- 如何理解并学习javascript中的面向对象(OOP) [转]
如果你想让你的javascript代码变得更加优美,性能更加卓越.或者,你想像jQuery的作者一样,写出属于自己优秀的类库(哪怕是基于 jquery的插件).那么,你请务必要学习javascript ...
- 前端开发:javascript中的面向对象
前端开发:面向对象与javascript中的面向对象实现(一) 面向对象理解: 面向对象是一种对现实世界理解和抽象的方法,是一种先进的程序设计理念,是一种比较抽象的,多形态的设计模式.我们可以这么理解 ...
- 深入理解javascript中实现面向对象编程方法
介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...
- JavaScript中的面向对象的讨论(转)
前言 今天,WEB2.0时代的到来,给了JavaScript又一次大展身手的机会.Web2.0借助JavaScript技术,使得客户端的Web体验更加丰富多彩,同时JavaScript面对的问题域也变 ...
- JavaScript中的面向对象程序设计
本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...
- 领悟 JavaScript 中的面向对象
JavaScript是基于对象的语言,我们可以使用面向对象的思想去开发js代码. JavaScript是基于对象的语言. 可以使用面向对象的思想,但是不少人对这一点理解得并不全面. 在 JavaScr ...
随机推荐
- JavaScript图形实例:图形的平移和对称变换
1.1 六瓣花平移变换 平移变换是指图形从一个位置到另一个位置所作的直线移动.如果要把一个位于P(x,y)的点移到新位置P’(x’,y’),如图1,则只要在原坐标上加上平移距离Tx和Ty即可. 即 ...
- 用Total Commander替换windos默认资源管理器的方法
Total Commander(简称TC)是一个功能强大的资源管理器. TC本身没有自带的替换windows资源管理器的功能,就必须自己动手解决了. 第一步先Google一下看有没有答案.当时搜出了不 ...
- keyup事件、keydown事件和input事件的区别
keydown.keyup 属于键盘事件,input 属于文本事件 详细说明: keydown:当用户按下键盘上的任意按键时触发,如果按住不放,会重复触发此事件. keyup:当用户释放键盘上的按键时 ...
- mybatis查询时间段
参考:https://bbs.csdn.net/topics/391838987 <!-- 查询条件:创建开始时间 --> <if test="createdBeginti ...
- 安装lnmp1.5到最后出现Error: MySQL install failed的解决方法
解决方法: mv /usr/bin/cmake /usr/bin/cmake.backup wget http://www.cmake.org/files/v3.0/cmake-3.0.2.tar.g ...
- 嵊州普及Day3T4
利内罗女士准备来到意大利进行修行.意大利由 n 个城市和 m 条道路构成,道路是双向的.到达第 i 个城市时,她可以取得该城市的全部信仰,并获得 ai 点能力提升,但因为在一个城市可以取得的信仰有 ...
- SPFA和堆优化的Dijk
朴素dijkstra时间复杂度$O(n^{2})$,通过使用堆来优化松弛过程可以使时间复杂度降到O((m+n)logn):dijkstra不能用于有负权边的情况,此时应使用SPFA,两者写法相似. 朴 ...
- 查看 Secret【转】
可以通过 kubectl get secret 查看存在的 secret. 显示有两个数据条目,kubectl describe secret 查看条目的 Key: 如果还想查看 Value,可以用 ...
- 南邮平台之Hello,RE!
小白闲逛了一下南邮平台看到了逆向这题,小白在网上看了一下别人的write up发现有点复杂.于是小白就试试看,直接Underfine然后结果就出来了.....有点意外...... 结果flag{Wel ...
- 【转置】使用mysql转置表格行和列
1.原始表 2.查询结果表 3.查询语句 1 SELECT 2 year1, 3 SUM( CASE WHEN mon= 1 THEN account END ) AS m1, 4 SUM( CASE ...