JS难点--面向对象(封装)
我觉得js的难点之一就是面向对象编程。
面向对象
它是一种编程思想,它在写法上比面向过程相对来说复杂一些;
以下是我学习中关于面向对象的知识点总结:
1、什么是对象
从广义上说,"一切皆对象";狭义上说,是一种复合数据类型Object。
对象可以添加属性(变量)与方法(函数)
2、创建对象的方法
①:直接字面量 {}
var person={
name:'jackson',
age:30,
sing:function(){
console.log('beat it');
}
};
person.height='180CM';
person.interset=function(){
console.log('dancing');
};
②:使用关键字new new Object()
var person1=new Object();
person1.name='jack';
person1.age=18;
person1.playgame=function(){
console.log('王者荣耀');
};
3、创建完的对象有两个特点
①:添加属性(属性的值为非函数的任意数据类型)
描述对象的特征
②:添加方法(方法的值为函数)
实现对象的一些功能
4、面向对象的写法特点
①:把变量写作属性;
②:会把功能写成一个函数;
③:这个函数是在对象身上的;
④:对象身上的功能可以继承。
5、如何封装一个函数
//工厂方式
function createPerson(name,age){
var obj=new Object; obj.name=name;
obj.age=age; obj.say=function(){
console.log('我叫'+obj.name);
} return obj;
} var p1=createPerson('Jackson',30);
var p2=createPerson('Jack',18); p1.say();
p2.say();
6、构造函数
创建并初始化对象的函数,并且要用new来调用函数,不用new调用的话与普通的函数就没有区别
通过构造函数new出来的对象叫实例,创造对象的过程叫实例化
构造函数存在一个问题:性能问题会造成资源浪费
function Person(name,age){
this.name=name;
this.age=age; this.say=function(){
console.log('my name:'+this.name);
};
}
var p1=new Person('Jackson',30); //一个实例
p1.say(); var p2=new Person('jack',18); //一个实例
p2.say();
7、原型(prototype)
函数身上的属性,每一个函数身上都有这个属性,它的值是一个对象
它身上可以放属性与方法,如果与构造函数相结合的话,通过构造函数创建的对象就会具有它身上的属性与方法
对象是通过构造函数创建的,那prototype就是这个对象的原型对象
建议把一些公用的属性或者方法都放到构造函数的原型身上,这样就可以解决构造函数的性能问题。
8、__proto__
对象身上的属性,每一个对象身上都会有这个属性。它的值也是一个对象,它的值就是它对应的构造函数的prototype的值
对象.__proto__===构造函数.prototype
对象之所以能够继承原型身上的属性与方法,是因为每个对象身上都有一个__proto__,那__proto__的值指向了构造函数的prototype
function Person(name,age){
this.name=name;
this.age=age;
} Person.prototype.gender='男';
Person.prototype.say=function(){
console.log('my name:'+this.name);
}; var p1=new Person('Jackson',30); //一个实例
var p2=new Person('Jack',18); //一个实例 console.log(p1.__proto__===Person.prototype); //true
9、原型链
对象与原型之间的关系(链接)
原型链查找规则
当我们调用一个对象身上的属性或者方法的时候,它就会有一个查找规则
①:首先会在自身去找,如果有的话就用自己的;
②:如果没有的话,它就在该对象的__proto__下查找,因为__proto__这个属性是指向对应的构造函数身上的protytpe,把它查找的时候找的就是构造函数的原型
③:如果原型身上也没有的话,那它会继续往外面找,直到找到最顶层的Object身上的prototype,如果都没有,则返回undefined
10、面向对象的写法
function 构造函数(){
this.属性=??;
}
构造函数.prototype.方法=function(){} var 实例对象=new 构造函数();
实例对象.方法();
11、constructor
概念:每个对象身上都会有这个属性,默认指向该对象对应的构造函数
这个属性不是放在对象身上,放在对应的原型对象身上
作用:查看对象的构造函数
语法:对象.constructor
返回值:对象的构造函数
问题:这个属性是可以被修改的,所以最好重新指向一下
function Coder(name){
this.name=name;
}
Coder.prototype={
constructor:Coder, //重新指向,防止改变它的构造函数
age:18,
gender:'男'
};
JS难点--面向对象(封装)的更多相关文章
- js之面向对象----封装篇
学习了一天的面向对象总结一下,共分为三类 - -! 老规矩 第一部分是概念性知识!!! 面向对象编程,我们可以把他想象成我们在造人.一个对象便是一个人,这个人有胳膊有腿,这便是一个对象的属性或者方法. ...
- JS难点--面向对象(继承)
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 15.0px Consolas; color: #a5b2b9 } 继承 让一个对象拥有另一个对象的属性或者 ...
- Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js
Atitit usbQb212 oo 面向对象封装的标准化与规范解决方案java c# php js 1.1. 封装性是面象对象编程中的三大特性之一 三个基本的特性:封装.继承与多态1 1.2. 魔 ...
- Atitit 面向对象 封装的实现原理
Atitit 面向对象 封装的实现原理 1.1. 动态对象的模拟使用map+函数接口可以实现1 1.2. 在用结构体 + 函数指针 模拟 对象 1 1.3. This指针..1 1.4. " ...
- JS类的封装及实现代码
js并不是一种面向对向的语言, 没有提供对类的支持, 因此我们不能像在传统的语言里那样 用class来定义类, 但我们可以利用js的闭包封装机制来实现js类, 我们来封装一个简的Shape类. 1. ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】第5篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-19 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第5篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)
一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...
- JS--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)
一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...
随机推荐
- java程序与编译
Java 源文件(.java) 使用 Java编译器(javac.exe)编译 生成 java字节码文件(.class) 使用 解释执行器(java.exe) 将字节码文件加载到java虚拟机(j ...
- Java :BufferedWriter类和BufferedReader类的构造方法、主要方法
BufferedWriter 和 BufferedReader 为带有默认缓冲的字符输出输入流,因为有缓冲区所以效率比没有缓冲区的高. 一.BufferedWriter 类 构造方法:buffered ...
- Shiro第三篇【授权、自定义reaml授权】
Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro的授权 Shiro授权的流程和认证的流程其实是差不多的: Shiro支持的授权方式 Shiro支持的授权方式有三 ...
- [01] Servlet是什么
1.Servlet是什么 Servlet(Server Applet),全称Java Servlet,是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容. 1.1 ...
- 升级与修改Nginx
自从上次安装了Nginx后,学到了很多新的东西,比如http2.0... 而且还发现nginx还出了新版本,遂决定升级下,还是那个URL,下载最新版. ./configure --user=www - ...
- OC——关于KVO
我们知道在WPF.Silverlight中都有一种双向绑定机制,如果数据模型修改了之后会立即反映到UI视图上,类似的还有如今比较流行的基于MVVM设计模式的前端框架,例如Knockout.js.其实在 ...
- 关于DbContext能不能单次请求内唯一?DbContex需不需要主动释放?欢迎各路大侠来“参战”!
基于前篇文章<HiBlogs>重写笔记[1]--从DbContext到依赖注入再到自动注入园友@Flaming丶淡蓝@ 吴瑞祥 提出了讨论和质疑,吓得我连夜查询资料(玩笑~). 本来文章的 ...
- Spring-boot:5分钟整合Dubbo构建分布式服务
概述: Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合).从服务模型的角度来看,Dubbo采用的是一种非常 ...
- ElasticSearch入门(3) —— head插件
#### 安装ES head插件 具体请参考github地址:https://github.com/mobz/elasticsearch-head 使用 安装Install # 在线安装head插件 ...
- 均值滤波去除图像噪声的matlab程序
所谓均值滤波实际上就是用均值替代原图像中的各个像素值. 均值滤波的方法是:对待处理的当前像素,选择一个模板,该模板为其近邻的若干像素组成,用模板中的像素的均值来替代原像素. 优点:算法简单,计算速度快 ...