js8
Posted 钱钱钱啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js8相关的知识,希望对你有一定的参考价值。
1. 面向对象:在程序中都是用一个对象来描述现实中一个具体的东西。
现实中的一个东西都包含属性和功能:
属性:描述一个东西特点的变量,一个值
功能:东西可以执行的操作
什么是对象:封装多个数据和方法的存储空间
什么是自定义对象:封装现实中一个东西的属性和功能的存储空间。
现实中东西的属性会成为对象中的属性变量。
现实中东西的功能,会成为对象中的方法(函数)
面向对象和面向过程的区别:
面向对象是将事物高度抽象化。
面向过程是一种自顶向下的编程
面向对象必须先建立抽象模型,之后直接使用模型就行了。
“面向过程”是一种是事件为中心的编程思想。就是分析出解决问题所需的步骤,然后用函数把这写步骤实现,并按顺序调用。
”面向对象“是以“对象”为中心的编程思想。
2. 创建自定义对象:3种方式:
1. var obj={‘属性名1‘:值1,
‘属性名2‘:值2,
‘功能名1‘:function(){...}
};
js中一切都是对象!所有对象的底层都是hash数组
属性:如何访问属性:2种:obj.属性名 obj["属性名"]
访问对象中不存在的属性
(访问数组中不存在的下标): 不会出错,返回undefined
强行给不存在属性赋值,不报错!js会自动创建同名属性
如何判断某个对象是否包含指定成员:3种
1. obj.hasOwnProperty("成员名")
2. "属性名" in 对象
如果找到,返回true,否则返回false!
3. 直接使用obj.属性名作为条件:
arr.indexOf!==undefined
如果不包含,返回undefind-->false
如果包含,返回值或function-->true
何时省略:判断方法是否存在时,可省略!==
如果确定属性值一定不是null,0,"",NaN
也可省略
方法:如何在方法中,访问当前对象自己:
****this关键字:运行时,指代正在*调用*方法的对象
(.前的对象)
this本质是window下唯一的一个指针,指向当前正在调用方法的对象
如何在方法内,访问当前对象自己的属性:this.属性名
***在方法内访问当前对象自己的属性,必须用this.属性名
***this和定义在哪儿无关!仅和调用时使用的当前对象有关
***如果无主的调用或赋值,默认this都是window!
1. ***面向对象:继承
面向对象三大特点:封装 继承 多态
封装:将描述同一个东西的属性和方法,定义在一个对象中
继承:父对象中的属性和方法,子对象可直接使用
多态:同一个对象,在不同情况下,呈现不同的状态
重载:同一方法名,传入参数不同,执行不同的操作
重写:子对象觉得父对象的成员不好用,可自己定义一个,覆盖父对象的成员
创建对象:3种:
1. 对象直接量
var obj={"属性名":值,
...:...,
"方法名":function(){ ...this.属性名... }
}
2. var obj=new Object(); //创建一个空对象
obj.属性名=值;
obj.方法名=function(){...this.属性名...}
3. 利用构造函数*反复*创建*相同结构*的对象:
构造函数:描述一类对象结构的特殊函数
2步:
1. 定义构造函数
function 构造函数名|类型名(属性参数1,.....){
this.属性名=属性参数1;
//在当前正在创建的对象中添加一个属性名
//赋值为属性参数1的值
...
this.方法名=function(){
...this.属性名...
}
}
2. 利用构造函数创建对象:
var obj=new 构造函数名|类型名(属性值1,...);
new: 1. 创建一个空对象:new obj={ };
2. 用空对象,调用构造函数
构造函数在空对象中添加属性和方法
3. 设置新对象的__proto__指向构造函数的prototype对象
4. 返回新对象的地址。
继承:js中一切继承都是用原型对象实现的!
原型对象:每个函数对象都有一个原型对象
构造函数的原型对象负责保存所有子对象共享的成员!
建议:所有子对象共享的方法,都应定义在构造函数的原型对象中。——避免重复定义方法对象,浪费内存。
说明:其实所有内置类型的API都是定义在类型.prototype
扩展对象属性:2种扩展:
1. 扩展共有属性:通过构造函数.prototype添加的属性
2. 扩展自有属性:通过某一个具体子对象添加的属性
判断自有属性或共有属性:
1. 判断自有属性:obj.hasOwnProperty("属性名")
2. 判断共有属性:
"属性名" in obj && !obj.hasOwnProperty("属性名")
在原型关系中包含 且 子对象自己*没有*
删除属性:delete 对象.属性名
*仅能删除当前对象自己的属性,无法删除共有属性
全局变量:3种:
var n=1; | window.n=1; | window["n"]=1
不能delete 不能delete 可被delete
原型链:由各级对象的__proto__逐级继承形成的关系
获得任意对象的父级原型对象:
Object.getPrototypeOf(子对象)
==>子对象.__proto__
检查对象的父对象:父对象.isPrototypeOf(子对象)
以上是关于js8的主要内容,如果未能解决你的问题,请参考以下文章
前端每周清单:Angular 5发布Kotlin与React