面向对象(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中的面向对象及有关应用的更多相关文章

  1. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  2. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  3. 前端开发:面向对象与javascript中的面向对象实现(一)

    前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“ ...

  4. JavaScript从初见到热恋之深度讨论JavaScript中的面向对象。

    JavaScript中的面向对象.面向对象的三个基本特征:封装.继承.多态. 1.封装 js的封装如下 定义Person类 function Person(name,age,sex) { this.n ...

  5. 如何理解并学习javascript中的面向对象(OOP) [转]

    如果你想让你的javascript代码变得更加优美,性能更加卓越.或者,你想像jQuery的作者一样,写出属于自己优秀的类库(哪怕是基于 jquery的插件).那么,你请务必要学习javascript ...

  6. 前端开发:javascript中的面向对象

    前端开发:面向对象与javascript中的面向对象实现(一) 面向对象理解: 面向对象是一种对现实世界理解和抽象的方法,是一种先进的程序设计理念,是一种比较抽象的,多形态的设计模式.我们可以这么理解 ...

  7. 深入理解javascript中实现面向对象编程方法

    介绍Javascript中面向对象编程思想之前,需要对以下几个概念有了解: 1. 浅拷贝和深拷贝:程序在运行过程中使用的变量有在栈上的变量和在堆上的变量,在对象或者变量的赋值操作过程中,大多数情况先是 ...

  8. JavaScript中的面向对象的讨论(转)

    前言 今天,WEB2.0时代的到来,给了JavaScript又一次大展身手的机会.Web2.0借助JavaScript技术,使得客户端的Web体验更加丰富多彩,同时JavaScript面对的问题域也变 ...

  9. JavaScript中的面向对象程序设计

    本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...

  10. 领悟 JavaScript 中的面向对象

    JavaScript是基于对象的语言,我们可以使用面向对象的思想去开发js代码. JavaScript是基于对象的语言. 可以使用面向对象的思想,但是不少人对这一点理解得并不全面. 在 JavaScr ...

随机推荐

  1. 「NOI2005」维护数列

    「NOI2005」维护数列 传送门 维护过程有点像线段树. 但我们知道线段树的节点并不是实际节点,而平衡树的节点是实际节点. 所以在向上合并信息时要加入根节点信息. 然后节点再删除后编号要回退(栈), ...

  2. redis 之 redis主从复制

    Redis集群中的数据库复制是通过主从同步来实现的 主节点(Master)把数据分发给从节点(Slave) 主从同步的好处在于高可用,Redis节点有冗余设计 主从复制的原理:1. 从服务器向主服务器 ...

  3. Lamda表达式学习笔记一

    Lamda表达式学习笔记一 一.Lamda语法诠释 三傻大闹宝莱坞的主人公兰彻说的一句话让我映像深刻:用简单的语言来表达同样的意 我并不是说书上的定义怎么怎么不对,而是应该理解书本上的定义,并用简单的 ...

  4. leetcode295 Find Median from Data Stream

    """ Median is the middle value in an ordered integer list. If the size of the list is ...

  5. 为什么在/etc/profile中设定的环境变量,对子进程可见

    系统启动时有个过程是启动初始shell,执行一些固定目录下的脚本,比如/etc/profile.....(系统启动时执行一次),我们在这些文件中添加并导出环境变量 这样shell启动的其它的进程就具备 ...

  6. 关于HTTP 协议

    HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送 ...

  7. EASYUI TREE得到当前节点数据的GETDATA方法

    function show() { var node = $('#tt-c71').tree('getSelected'); var data = $('#tt-c71').tree('getData ...

  8. coding 321

    三大原理(计算机原理.操作系统原理.编译原理)两个协议(TCP与HTTP协议)一种结构(数据结构)

  9. CBC加密原理及攻击

    原理基于分组加密加密过程 Plaintext:明文,待加密的数据.IV:用于随机化加密的比特块,保证即使对相同明文多次加密,也可以得到不同的密文,初始向量,用来与第一块的明文异或运算.Key:被一些如 ...

  10. 嵊州普及Day4T1

    题意:从n个数中选出k个数,使他们任意两数之差都等于m. 思路:任意差值都等于m,不就等价于k个数模m余数相同吗? 然后桶排储蓄一下各数余数即可. 见代码: #include<iostream& ...