JS高级. 02 面向对象、创建对象、构造函数、自定义构造函数、原型
面向对象的三大特性:
- 封装
a) 把一些属性和方法装到一个对象里
2. 继承
a) js中的继承是指:
- 一个对象没有一些方法和属性,而另一个对象有
- 把另一个个对象的属性和方法,拿过来自己用,这就是继承
b) 混入式继承 for … in
1. 父类的属性和方法在所有之类
3. 多态
a) JS中没有相应的体现
b) 在强类型语言比较常见
c) 实用父类的变量接受子类的对象
d) 父类的属性方法供所有的子类共享
创建对象的方式
1. 创建对象
四种方法:
1、字面量创建
用一个创建一个,不能复用。会造成代码亢余,资源浪费
2、内置构造函数创建对象
1、内置构造函数创建对象
1. var p = new Object();
2.var arr = new Array();
3. 创建出来的对象都是空对象,要手动添加属性,造成代码重复
3、 封装简单的工厂函数(不推荐)

function creatObj(name, age){
var obj = {
boj : name;
obj: age;
sayHello : function(){
console.log('');
}
}
return obj;
}

4、 自定义构造函数
function Porple(data1,data2){
this.xx = data;
}
构造函数是干什么用的?
在JavaScript中,构造函数是给对象添加属性,初始化属性用的。
对象的创建过程
var p = new Person();
以上面这个p对象创建为例:
首先使用new关键字创建对象,类似于使用
{},这个时候创建出来的对象是一个"没有任何成员"的对象。这里需要注意两点:- 使用
new关键字创建的对象,对象的类型就是创建这个对象使用的构造函数的函数名 - 使用
{}创建对象,对象的类型一定是Object,相当于使用了new Object()
- 使用
使用构造函数为其初始化成员
- 在构造函数调用开始的时候,有一个赋值操作,也就是让
this = 刚创建出来的对象 - 在构造函数中,
this就代表刚创建出来的对象
- 在构造函数调用开始的时候,有一个赋值操作,也就是让
在构造函数中,利用对象的动态特性,为对象添加成员
自定义构造函数
function Porple(data1,data2){
this.xx = data;
}
- 概念:用来实例化对象,并且给初始化对象赋值
- 构造函数名首字母大写
- 构造函数一般和new关键字一起使用
- 构造函数返回值默认为新创建好的对象,如果手动设置返回值
a) 返回值类型如果不是Object类型的都还返回创建的对象
b) 如果是Object类型的就返回object
a) 对象字面量{},创建对象
b) 自定义构造函数,创建对象
- 构造函数也是函数,通常用来初始化对象
- new用来创建对象
- 构造函数用来初始化函数
- 构造函数名要大写,
c) 构造函数的执行过程
- 使用new关键字创建对象
- 调用构造函数把新创建出来的对象赋值给构造函数的this关键字
- 在构造函数内实用this为新创建出来的对象添加成员
- 默认返回新创建的这个对象
- 如果return一个空值,或者return一个基本类型数据仍旧是返回新创建的对象
a) 返回undefined和null都是返回新对象
- 如果return的是object类型,将返回return后面的对象
- 函数名加括号就是调用函数
- 不写括号是把函数整体代码赋值给另一个变量
- 如果调用函数的时候不给构造函数实参,构造函数不会创建新对象,里面的this将会指向window,添加的属性也会添加给window
- 如果构造函数没有参数,可以不写括号调用
对象成员:属性和方法
原型、
- 每一个函数在定义的时候,都会有跟它关联的一个对象被创建出来
- 每一个由构造函数创建出来的对象,都会默认的和构造函数的神秘对象关联
- 当使用一个方法进行属性或者方法访问的时候,会先在当前对象内查找该属性和方法
- 如果当前对象内未找到,就回去跟它关联的神秘对象内进行查找
- 访问构造函数的原型
a) 构造函数.prototype
2. 构造函数.prototype.新属性 = 属性值
3. 自己和原型中都有的属性,优先用自己的
3. 创建一个对象叫做实例化对象
a) 通过构造函数创建对象创建对象的过程
4. 实例
a) 通过构造函数实例化出来的对象就是该构造函数的一个实例
5. 原型的实用方法:
a) 利用对象的动态特性给原型对象添加属性
6. 直接替换原型对象
Porple.prototype = {
name : ‘Jack’,
}
a) 直接替换原型对象出现的问题
- 在替换原型之前创建的对象的原型 和在替换原型之后创建的对象的原型 不是同一个
- 替换不是修改
b) 点语法进行属性赋值的时候,不会去原型查找
c) 使用点语法赋值的时候,如果对象中不存在该属性,就会对该对象新增属性,不会去原型中查找
d) 如果原型总分的属性是引用类型的属性,那么所有的对象共享该属性,并且一个对象修改了该引用
类型中的成员,所有对象都会被修改
e) 一般不会把属性放置到原型中
7. 通过构造函数访问原型
a) 构造函数.prototype
8. 通过对象访问原型
a) 对象.__proto__ //不推荐使用
9. constructor:原型对象的属性
JS高级. 02 面向对象、创建对象、构造函数、自定义构造函数、原型的更多相关文章
- JS高级---工厂模式创建对象和自定义构造函数创建对象的区别
创建对象:工厂模式和自定义构造函数的区别 共同点: 都是函数, 都可以创建对象, 都可以传入参数 区别: 工厂模式: 函数名是小写 有new, 有返回值 new之后的对象是当前的对象 直接调用 ...
- JS高级---三种创建对象的方式
JS高级---三种创建对象的方式 字面量的方式 (实例对象) 调用系统的构造函数 自定义构造函数方式 //创建对象---->实例化一个对象,的同时对属性进行初始化 var per=new Per ...
- JS高级:面向对象的构造函数
1 创建对象的方式 1.1 字面量的方式创建对象 var p1 = { name: '张三', run: function () { console.log(this.name + '跑'); } } ...
- JS高级:面向对象解析
1 实例属性/方法 都是绑定在使用构造函数创建出来的对象p上; 最终使用的时候也是使用对象p来进行访问; function Person(name, age, doFunc) { this.name ...
- JS高级---体会面向对象和面向过程的编程思想
体会面向对象和面向过程的编程思想 ChangeStyle是自定义的构造函数,再通过原型添加方法的函数. 实例化对象,导入json参数,和创建cs,调用原型添加的方法函数 过渡,先熟悉记忆 <!D ...
- JS基础语法---创建对象---三种方式创建对象:调用系统的构造函数;自定义构造函数;字面量的方式
创建对象三种方式: 调用系统的构造函数创建对象 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象) 字面量的方式创建对象 第一种:调用系统的构造函数创建对象 //小苏举例子: //实例化对 ...
- 前端 ---JS中的面向对象
JS中的面向对象 创建对象的几种常用方式 1.使用Object或对象字面量创建对象 2.工厂模式创建对象 3.构造函数模式创建对象 4.原型模式创建对象 1.使用Object或对象字面量创建对象 ...
- JS高级---复习
复习 面向过程和面向对象都是编程的思想, 方式不一样 面向过程: 凡事都是亲力亲为, 所有的代码都要自己写, 每一步都要很清楚, 注重的是过程 面向对象: 执行者成为指挥者, 只要找对象, 然后让对象 ...
- js面向对象、创建对象的工厂模式、构造函数模式、原型链模式
JS面向对象编程(转载) 什么是面向对象编程(OOP)?用对象的思想去写代码,就是面向对象编程. 面向对象编程的特点 抽象:抓住核心问题 封装:只能通过对象来访问方法 继承:从已有对象上继承出新的对象 ...
随机推荐
- js数组插入指定位置元素,删除指定位置元素,查找指定位置元素算法
将元素x插入到顺序表L(数组)的第i个数据元素之前 function InsertSeqlist(L, x, i) { // 将元素x插入到顺序表L的第i个数据元素之前 if(L.length == ...
- 自封装ajax
项目中有时候用不到jq,需要了解xmlhttp原理,自己写一套函数请求和发送数据! /* 封装ajax函数 * @param {string}opt.type http连接的方式,包括POST和GET ...
- ASP.NET 中对大文件上传的简单处理
在 ASP.NET 开发的过程中,文件上传往往使用自带的 FileUpload 控件,可是用过的人都知道,这个控件的局限性十分大,最大的问题就在于上传大文件时让开发者尤为的头疼,而且,上传时无法方便的 ...
- XP无法访问SharePoint 2010的问题
最近用户反馈XP系统的电脑无法访问SharePoint 2010系统,换成了火狐浏览器后可以正常访问,但是在上传附件时出现异常,支持人员给的解决方案是换操作系统,要换成win7. 但是因为工作原因,不 ...
- 创建Spark镜像文件
创建Spark镜像文件 1.将spark容器提交到新的镜像中 $>docker commit 01a25bdf1499 myrepos:centos-spark 2.将centos-spark镜 ...
- Oracle 11.1.0.6 导入导出bug
实验环境: 11.1.0.6.0 对ANONYMOUSUSER_ALL表中分区进行备份 SQL> select TABLE_NAME,PARTITION_NAME,HIGH_VALUE,PA ...
- 三个方法教会你win7中IIS7配置php环境
三个方法教会你win7中IIS7配置php环境.今天静下心来研究了下在win7中使用IIS7配置php环境,其实很简单!跟下面方法做之前,请先确定你的电脑中未安装其它相关环境程序及服务,之前安装过ap ...
- May 25th 2017 Week 21st Thursday
Follow your heart, but take your brain with you. 跟随你的内心,但是请别失去理智. I was ever told that we should fol ...
- Jmeter入门19 保存测试结果(或从文件读取结果)
以聚合报告为例,其他监听器有write results to file的类似. 首先 为了避免每次保存的测试报告被覆盖,我们在testplan下添加两个参数:项目名和当前时间(毫秒级) 其次 添加聚合 ...
- 简单的PHP算法题
简单的PHP算法题 目录 1.只根据n值打印n个0 2.根据n值打印一行 0101010101010101010101…… 3.根据n值实现1 00 111 0000 11111…… 4.根据n值实现 ...