8-对象、构造函数、实例化
(一)、对象
var teacher = {name: '张三',age: 32,sex: 'male',height: 176,weight: 130,teacher: function(){console.log('I am teaching JavaScript');},smoke: function(){console.log('I am smoking');},eat: function(){console.log('I am having a dinner');}
}
(1)增加属性和方法
teacher.address = '北京';
teacher.drink = function(){console.log('I am drinking bear');
}
(2)删除属性和方法
删除属性
delete teacher.address;
删除方法
delete teacher.teach; //注意:笔试题 不能加() 加括号就变成执行了//删除键名就可以了
var teacher = {name: '张三',age: 32,sex: 'male',height: 176,weight: 130,teacher: function(){console.log('I am teaching JavaScript');},smoke: function(){teacher.weight--;console.log(teacher.weight);},eat: function(){teacher.weight++;console.log(teacher.weight);}}teacher.smoke();
teacher.smoke();
teacher.eat();
如何让teacher变成我,这样就变成了我的体重要加一斤,我的体重要减一斤,而不是老师的体重要加一斤,老师的体重要减一斤。
(3)、this
记住:this代表的是对象本身
smoke: function(){this.weight++;console.log(this.weight);
}
(4)、array.splice(index, howmany, item1, …, itemX)
splice() 方法向/从数组添加/删除项目,并返回删除的项目。
**注释:**splice() 方法会改变原始数组。
参数 | 描述 |
---|---|
index | 必需。整数,指定在什么位置添加/删除项目,使用负值指定从数组末尾开始的位置。 |
howmany | 可选。要删除的项目数。如果设置为 0,则不会删除任何项目。 |
item1, …, itemX | 可选。要添加到数组中的新项目。 |
var num = 3;
var arr = [1,2,3,4];for(var i = 0; i < arr.length; i++){if(arr[i] === num){arr.splice(i,1); //第一个参数,数组下标,第二个参数要删除几个}
}
console.log(arr); //[1,2,4]
(5)、indexOf()
array.indexOf(item,start)
stringObject.indexOf(searchvalue,fromindex)
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。
参数 | 描述 |
---|---|
item | 必须。查找的元素。 |
start | 可选的整数参数。规定在数组中开始检索的位置。它的合法取值是 0 到 stringObject.length - 1。如省略该参数,则将从字符串的首字符开始检索。 |
var num = 3;
var arr = [1,2,3,4];
console.log(arr.indexOf(num));// 2 返回元素所在的下标,如果不存在就返回-1
(6)、案例
attendence 出勤
var attendance = {students: [],total: 6,join: function(name){this.students.push(name);if(this.students.length === this.total){console.log(name + '到课,学生已到齐');}else{console.log(name + '到课,学生未到齐');}},leave:function(name){var idx = this.students.indexOf(name);if(idx !== -1){this.students.splice(idx,1);}console.log(name + '早退');console.log(this.students);},classOver: function(){this.students = [];console.log('已下课');}
}attendance.join('张三');
attendance.join('李四');
attendance.join('王五');
attendance.join('赵六');
attendance.join('吴七');
attendance.join('孙八');
attendance.leave('李四');
attendance.classOver();
//这个案例学到了splice indexOf 方法内部是可以传递参数的,在调用的时候可以传递相应的实参
(二)、构造函数
(1)、对象字面量
声明了一个变量,将一个对象赋值给这个变量,这种方式叫对象字面量或对象直接量
这只是一种在javascript中创建对象的方式
var obj = {name:'张三',sex: 'male'
}
(2)、构造函数
构造函数写出来以后可以通过new关键字实例化一个对象
系统自带的构造函数,用系统内置的new Object()来创建一个对象
O大写
对象和构造函数是两码事,对象是通过实例化构造函数而创建的一个对象实例
var obj = new Object();//这种方式跟对象字面量是完全相等的,没有任何区别,没有优势之说,用的也不是特别多
obj.name = '张三';
obj.sex = '男士';
(3)、自定义构造函数
自定义构造函数 在写项目中会大量使用,因为只要你写模块化,插件化,组件化,必须使用自定义构造函数
自定义构造函数和普通函数没什么区别
大驼峰。不是硬性要求,这只是和普通函数相区别的一种写法。
在对象中,使用: 和 , 而在构造函数中写的是语句,用;隔开
function Teacher(){this.name = '张三';this.sex = '男士';this.weight = 130;this.smoke = function(){this.weight--;console.log(this,weight);}this.eat = function(){this.weight++;console.log(this,weight);}
}
//自定义构造函数也是函数,在没执行之前this根本就不存在,Teacher在GO里面,不执行的时候不看{}里面的
//this根本就没生成,更谈不上指代的是Teacher,Teacher是构造函数,就相当于一个工厂,构造工厂
var teacher = new Teacher(); //这个时候this才生成 要让this存在必须要实例化它//this指向的是谁,this指向的是对象本身。
通过构造函数new出来是不同的对象,对象与对象之间互不影响
var teacher1 = new Teacher();
var teacher2 = new Teacher();teacher1.name = '李四';console.log(teacher1, teacher2);
function Teacher(name,sex,weight,course){this.name = name;this.sex = sex;this.weight = weight;this.course = course;this.smoke = function(){this.weight--;console.log(this,weight);}this.eat = function(){this.weight++;console.log(this,weight);}
}var t1 = new Teacher('张三','男',145,'javascript');
var t2 = new Teacher('李四','女',90,'HTML');
console.log(t1);
console.log(t2);
option选项 配置项这种方法易于维护。
这样传参可以不按照顺序,也知道传递的是什么参数
//option选项 设置项
function Teacher(opt){this.name = opt.name;this.sex = opt.sex;this.weight = opt.weight;this.course = opt.course;this.smoke = function(){this.weight--;console.log(this,weight);}this.eat = function(){this.weight++;console.log(this,weight);}
}var t1 = new Teacher({name: '张三',sex: '男',weight:145,course:'javascript'
});
console.log(t1);
//teacher.js
function Teacher(opt){this.name = opt.name;this.sex = opt.sex;this.weight = opt.weight;this.course = opt.course;this.smoke = function(){this.weight--;console.log(this,weight);}this.eat = function(){this.weight++;console.log(this,weight);}
}//index.html
<script type="text/javascript" src="teacher.js"></script>
<script type="text/javascript">var t1 = new Teacher({name: '张三',sex: '男',weight:145,course:'javascript'});
console.log(t1);
</script>
8-对象、构造函数、实例化相关推荐
- java new 删除吗,java泛型对象初始化-java泛型对象会实例化吗T t=new T()
java泛型对象初始化--java泛型对象能实例化吗T t=new T() java中没法得到泛型参数化类型,因为在编译期没法确定泛型参数化类型,也就找不到对应的类字节码文件,自然就不行了 泛型反射的 ...
- JS-对象-构造函数-实例化-this
JS-对象-构造函数-实例化-this 1 回顾 1. 定义函数的方式function 关键字表达式方式Function 构造函数2. 函数的调用和返回值3. 函数的参数形参和实参形参的默认值argu ...
- Python16-面向对象类和对象构造函数
一.面向对象 1.概念 1.1面向对象的设计思想 面向对象是基于万物皆对象这个哲学观点.在Python中,一切皆对象 举例说明:案例一:我想要吃大盘鸡面向过程 面向对象1.自己去买菜 1.委托一个会砍 ...
- Python 学习笔记 系统模块 面对对象思想 类和对象 类中的方法与对象 构造函数和析构函数
一.系统模块: UTC:国际标准时间, 格林尼治天文时间,UTC+8 时间戳:指定时间距离1970.1.1 00:00:00的秒数 time:时间 datetime:日期 calendar:万年历 o ...
- JVM:对象的实例化、内存布局与访问定位
对象的实例化 创建对象的方式 new关键字 最常见的方式 变形1:Xxx的静态方法(单例模式) 变形2:XxxBuilder/XxxFactory的静态方法 Class的newInstance() 反 ...
- 类的加载顺序和对象的实例化
直接就在JDK8中用代码来验证吧. import lombok.extern.slf4j.Slf4j;@Slf4j public class Printer {private String s;pub ...
- Java中对象的实例化顺序
文章目录 1 Java中对象的实例化顺序 1 Java中对象的实例化顺序 继承后的初始化顺序: 静态成员包括静态构造代码块,初始化顺序跟书写顺序有关.
- JVM_04 对象的实例化+内存布局+访问定位+直接内存
一.前言: (1).new 最常见的方式 | 变形1 : Xxx的静态方法 | 变形2 : XxBuilder/XxoxFactory的静态方法 (2).Class的newInstance():反射的 ...
- c++11中static类对象构造函数线程安全
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105113421 s ...
- JVM学习笔记之-对象的实例化,内存布局与访问定位,直接内存(Direct Memory)
对象的实例化 对象的内存布局 图解 对象的访问定位 句柄访问 好处 reference中存储稳定句柄地址,对象被移动(垃圾收集时移动对象很普遍)时只会改变句柄中实例数据指针即可,reference本身 ...
最新文章
- 为何Google、微软、华为将亿级源代码放一个仓库?从全球最大代码管理库说起...
- solr多core的处理
- Sprint 站立会议(个人)
- java Lock 源码分析
- Solr+Hbase多条件查(优劣互补)
- 下一代微服务架构基础:ServiceMesh?
- windows7 配置iis技巧
- 使用Chrome Frame插件解决IE浏览器兼容问题
- 利用t-SNE可视化Glove向量
- linux多级菜单脚本教程,Linux下使用readline库编程实现多级CLI菜单
- 2021如何提升网站的排名?SEO
- 几个例子理解博弈论与纳什均衡
- 传输速率和传播速率的理解
- PowerShell 实现企业微信机器人推送消息
- 模电知识体系总结-1.1半导体基础器件
- python pyqtgraph绘图库-绘制图形
- android电视横竖屏切换在哪里,Android横竖屏切换总结
- java实现oracle的months_between函数
- 如何简单理解贝叶斯决策理论(Bayes Decision Theory)
- [BZOJ1067][SCOI2007]降雨量(线段树)