js对象及初识面向对象(4)
一、什么是对象?
对象是包含了属性和方法的集合体
二、什么是面向对象?
面向对象是一种编程思想,在JS当中利用原型来阐述这种思想的编程方法
三、构建对象:
1.内置对象:
String Math Date Array Boolean RegExp
2.自定义对象:
方式一:通过new Object()的方式创建对象
var objwang=new Object();
//指定对象的属性
objwang.name="王洪涛";
objwang.address="北京市海淀区五道口公共厕所";
//指定对象的方法
objwang.show=function(){
alert(objwang.name);
};
//调用方法
objwang.show();
方式二:通过字面量创建对象
/*通过字面量创建对象*/
var objliu={
//属性
name:"刘彬",
age:25,
//方法
say:function(){
alert('大家好,我叫'+this.name+",欢迎大家来到我的烧烤店品尝烧烤,今日的消费由刘磊买单");
}
};
//调用方法
objliu.say();
四、构造函数和原型对象
(一)、构造函数
/* 构造函数 */
function Student(name,age){
this.name=name;
this.age=age;
this.say=function(){
alert(this.name);
}
};
使用构造函数,必须使用new操作符
var student1=new Student("john",13);
var student2=new Student("baby",18);
对象的constructor属性最初是用来标识对象类型的,但是提到检测对象类型,还是instanceof操作符更可靠一些
alert(student1.constructor==Student);//true alert(student1 instanceof Student);//true alert(student1 instanceof Object);//true
(二)、原型对象
1.js创建的每个函数都有一个prototype属性,这个属性是一个指针,指向一个对象
2.prototype就是通过调用构造函数而创建的那个对象实例的原型对象,使用原型对象的好处就是可以让所有对象实例共享它的所有方法和属性
function Flower(){
}
Flower.prototype.name="曼陀罗花";
Flower.prototype.genera="茄科 曼陀罗属";
Flower.prototype.area="印度、中国北部";
Flower.prototype.uses="观赏或药用";
Flower.prototype.showName=function() {
alert(this.name);
}
var flower1=new Flower();
flower1.showName();
var flower2=new Flower();
flower2.showName();
alert(flower1.showName==flower2.showName);//true
3.在默认情况下,所有原型对象都会自动获得一个constructor的属性,这个属性包含一个指向prototype属性所在函数的指针。所以Flower.prototype.constructor指向Flower。
4.当调用构造函数创建一个新实例后,该实例的内部将包含一个指针指向构造函数的原型对象,这个属性是_proto_
5.关系图解:(p1和p2中的属性改为_proto_,图中写法有误)

6.当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性
五、继承
(一)、原型链
一个原型对象是另一个原型对象的实例 (Man.prototype=new Humans())相关的原型对象层层递进,就构成了实例与原型的链条,就是原型链
function Humans(){
this.clothing=["trousers","dress","jacket"];
}
function Man(){ }
//必须先指定父子关系
Man.prototype=new Humans();
var man1=new Man();
man1.clothing.push("coat");
alert(man1.clothing);
var man2=new Man();
alert(man2.clothing);
关系图:

原型链存在两个问题:
1.包含引用类型的原型,由于包含引用类型值的原型属性会被所有实例共享,在通过原型来实现继承时,原型实际上会变成另一个类型的实例,因此,原先的实例属性也就变成了原型的属性了;
2.在创建子类型实例时,不能向父类型的构造参数中传递参数
(二)、对象继承
1.借用构造函数:子类型构造函数内部调用父类型构造函数
apply(对象,参数数组);
call(对象,参数列表);
/*创建子类Dog*/
function Dog(name,health){
/* 创建子类型的实例时,父类型的构造函数中传递参数 */
var array=[name,health];
//apply()传递参数时,要把参数封装到数组当中
/* Pet.apply(this,array) */
//call()传递参数,必须把参数列举出来
Pet.call(this,name,health);
}
方法只能在构造函数内定义,方法无法复用
2.组合继承(伪经典继承)
原型链和借用构造函数同时使用时称为组合继承
function Humans(name){
this.name=name
this.clothing=["trousers","dress","jacket"];
}
Humans.prototype.sayName=function(){
alert(this.name)
}
function Man(name){
Humans.call(this,name);//继承属性
this.age=age;
}
Man.prototype=new Humans();//继承方法
js对象及初识面向对象(4)的更多相关文章
- 第五章 JavaScript对象及初识面向对象
第五章 JavaScript对象及初识面向对象 一.对象 在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. 在JavaScript对象分为内置对象和自定义对象,要处理一些 ...
- accp8.0转换教材第8章JavaScript对象及初识面向对象理解与练习
JavaScript数据类型,对象,构造函数,原型对象,初识原型链,对象继承 一.单词部分 ①object父类②constructor构造函数③instance实例④call调用 ⑤apply应用⑥c ...
- JQuery制作网页—— 第四章JavaScript对象及初识面向对象
1.对象:在JavaScript中,所有事物都是对象,如字符串.数值.数组.函数等. JavaScript中的基本数据类型: number(数值类型) string(字符串类型) boolean ...
- JavaScript对象及初识面向对象
一.对象 1.1对象是什么 对象是包含相关属性和方法的集合体 1.2什么是面向对象 面向对象仅仅是一个概念或者编程思想 通过一种叫做原型的方式来实现面向对象编程 二.创建对象 2.1自定义对象 2.1 ...
- [JS] 面向对象的5种写法和拓展JS对象的写法
面向对象的JAVA 最开始当然是对象的定义了 收集了以下的五种写法 //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; C ...
- 079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象
079 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 04 实例化对象 本文知识点:实例化对象 说明:因为时间紧张,本人写博客过程中只是对知 ...
- 077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象
077 01 Android 零基础入门 02 Java面向对象 01 Java面向对象基础 01 初识面向对象 02 类和对象 本文知识点:类和对象 说明:因为时间紧张,本人写博客过程中只是对知识点 ...
- JS高程3:面向对象的程序设计——理解对象
JS中对象的定义: (无序)属性的集合 (无序)值的集合 (无序)名值对的集合 JS对象是基于引用数据类型来创建的. JS对象创建的2种方式: 传统方式 对象字面量 var person = new ...
- [Django框架 - 静态文件配置、request对象方法初识、 pycharm链接数据库、ORM实操增删改查、django请求生命周期]
[Django框架 - 静态文件配置.request对象方法初识. pycharm链接数据库.ORM实操增删改查.django请求生命周期] 我们将html文件默认都放在templates文件夹下 将 ...
随机推荐
- 怎样创建并使用 vue 组件 (component) ?
组件化开发 需要使用到组件, 围绕组件, Vue 提供了一系列功能方法, 这里仅记录组件的 最简单 的使用方法. 1. 通过 Vue.component(tagName, options) 注册一个 ...
- DisableThreadLibraryCalls与DLLMain死锁
1.首先写个简单的DLL,用来验证 BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserve ...
- VPS磁盘划分建立新磁盘
今天我们来教下大家拿到VPS后,如何划分电脑内的磁盘空间.很多朋友可能遇到拿到VPS,为什么会打开电脑后在电脑盘那看到就一个C盘.还有些用户以为怎么只有那小的磁盘空间啊!怎么和卖的不一样啊!其实了我们 ...
- nginx之健康检查
正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...
- form表单中的enctype 属性以及post请求里Content-Type方式
对于form表单中的enctype 属性之前理解的一般,就知道是类似于一种编码形式.后来公司做一个form表单提交数据的时候,重点是这个form表单里有文件上传,而我又要用vue来模拟form表单提交 ...
- 4.移动端自动化测试-API讲解
一.前置代码 1.导入driver对象 from appium import webdriver 2.声明手机驱动对象 只有声明驱动对象我们才可以让手机完成脚本的操作 driver = ...
- 中断或取消Promise链的可行方案
ES6标准引入的异步编程解决方案Promise,能够将层层嵌套的回调转化成扁平的Promise链式调用,优雅地解决了“回调地狱”的问题.当Promise链中抛出一个错误时,错误信息沿着链路向后传递,直 ...
- Hadoop_06_Hadoop的HDFS的概念和特性
1.HDFS的概念和特性 1.1. 首先,它是一个文件系统,用于存储文件,通过统一的命名空间——目录树来定位文件 1.2. 它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色:重 ...
- Java运行环境绿色部署配置
这个Java的绿色安装配置,还有从未自己的使用电脑说起来. 最近电脑运行慢,很长时间没有清理及维护了,而且有可能中毒或木马了,所以就把系统进行了Ghost还原了,所以原来安装的jdk环境也无法使用了, ...
- nginx基本概述
上级回顾: 1.NFS 2.Sersync 3.SSH 1.ssh使用两种登录服务器的方式,哪两种? 密码 用户名 + 密码 秘钥 用户名 + 秘钥(私钥) 公钥加密 私钥解密 2.大家常说的 塞ke ...