面向对象-1
时间:2021-07-20
本文章向大家介绍面向对象-1,主要包括面向对象-1使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>面向对象</title>
</head>
<body>
<script>
/**
* 对象
* 类
* 实例
*
* 封装 继承 多态
*
* 封装-> :把实现某个功能的代码封装到函数中,起到"低耦合高内聚"的作用
* 继承-> :子类及子类的实例继承了父类中的属性和方法
* 多态-> :函数的重载(方法名相同,但是传递参数的个数或者类型不同,识别为两个不同的方法)和重写(子类重写父类的方法)
*
*
* js 内置类
* 每一个数据类型 都有自己的所属内置类
* 获取的元素集合或者节点集合也是有自己的类
* 每一个元素标签都有 自己所属的类
*
* Number Sting Boolean Array
* FUNCTION 函数类
* OBJECT 对象类
*/
/**
* 自定义类 (所有的类【内置类/自定义类】 都是 “函数数据类型” 的值)
* 函数执行的时候 基于 new 执行既可 “构造函数执行”
* */
// function Fn(x,y){
// let total = x + y;
// this.x = x;
// this.y = y
// // return total;
// return {
// name:"Eric"
// }
// }
// 作为普通函数执行
// console.log(Fn(10,20));
/** 构造函数执行
* 创建上下文之后 浏览器默认帮我蒙创建一个对象“实例对象”
* 把当前 Fn 函数当作一个类的 “构造函数”
* 创建的对象就是这个类的一个实例
*
* 初始 this的时候,让this 指向 当前创建的实例对象
* 在 代码执行完 返回值的事件
* 如果函数没有 return 或者返回的值是一个基本数据类型值,
* 则浏览器默认 会把创建的实例对象返回
*
* 如果函数本身返回的就是一个引用数据类型值,还是以自己返回的为主
*
*/
// f1 是 fn这个类的一个实例对象
// let f1 = new Fn(10,20)
// // 由于构造函数体中,默认自己返回一个引用数据类型值,
// // 所以f1 不再是 创建的 Fn 实例, 而是自己返回的对象
// console.log(f1); // Fn {x: 10, y: 20}
// // instanceof 检测当前实例是否属于这个类
// console.log(f1 instanceof Fn); // false
// 2
// function Fn(x,y){
// let total = x + y;
// this.x = x;
// this.y = y
// this.say = function say(){
// console.log(`SAY:${total}`);
// }
// }
// let f1 = new Fn(10,20)
// let f2 = new Fn;
/**
* 检测一个属性是否为当前对象的成员
* 属性名 in 对象: 不论是私有属性还是公有的属性,只要有就是true
* 对象.hasOwnProperty(属性名): 必须是对象的私有属性, 结果才是true
*/
// console.log('say' in f1); // true
// console.log('toString' in f1); // true
// console.log('total' in f1); // false
// console.log(f1.hasOwnProperty('say')); // true
// console.log(f1.hasOwnProperty('toString')); // false
// console.log(f1.hasOwnProperty('total')); // false
/**
* Fn vs Fn()
* fn 代表的是函数本身(堆内存) -> Fn(x,y){...}
* Fn() 是把函数执行,获取其返回结果
* */
/**
* new Fn vs new Fn(10,20)
* 都是把Fn执行了
* 只是第一个没有传递实参,
* 第二个可以传递实参而已
*
* new Fn 运算优先集 是 18 (无参数列表new)
* new Fn() 运算优先集 是 19 (有参数列表new)
*/
// 3
Object.prototype.AA = 'Eric';
let obj = {
name: 'xxx',
age:11,
0:100,
[Symbol('AA')]:200,
[Symbol.toPrimitive]:function(){
return 0;
}
}
Object.prototype.bb = 'Eric1';
/**
* 基于 "for...in" 循环遍历对象
* 优先遍历数字属性
* 不会遍历到 Symbol 属性
* 会把自己扩展到 “类原型”上的公共属性方法也遍历到
* */
// for(let key in obj){
// // console.log(item);
// // 在遍历过程中,遍历到 公共属性,则停止遍历,
// // 因为"for...in" 循环遍历的本意就是只遍历私有的属性既可
// if(!obj.hasOwnProperty(key)) break;
// console.log(key,obj[key]);
// }
// console.log(obj);
/**
* Object.keys() ["0", "name", "age"]
* 获取当前对象 所有非symbol的私有属性【数组】
*
* Object.getOwnPropertySymbols(obj) 获取对象所有的 Symbol 私有属性【数组】
* [Symbol(AA), Symbol(Symbol.toPrimitive)]
* */
// console.log(Object.keys(obj)); // ["0", "name", "age"]
// console.log(Object.getOwnPropertySymbols(obj)); // [Symbol(AA), Symbol(Symbol.toPrimitive)]
// console.log(Object.getOwnPropertyNames(obj)); // ["0", "name", "age"]
// console.log(Object.getPrototypeOf(obj)); 获取原型上的数据
let keys = [...Object.keys(obj),...Object.getOwnPropertySymbols(obj)]
// console.log(keys); ["0", "name", "age", Symbol(AA), Symbol(Symbol.toPrimitive)]
keys.forEach(key =>{
console.log(`属性名:${String(key)},属性值:${obj[key]}`);
})
</script>
</body>
</html>
我是Eric,手机号是13522679763
原文地址:https://www.cnblogs.com/eric-share/p/15035123.html
- Netty断线重连
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
- gitbook安装与使用,并使用docker部署
- 【专业技术】在C/C++程序中打印当前函数调用栈
- 关于定位position的相关知识
- Docker+Jenkins持续集成环境(1)使用Docker搭建Jenkins+Docker持续集成环境
- 段落首字下沉
- 【编程基础】C语言指针、引用和取值
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
- JavaScript中的this详解
- 使用SpringBoot开发REST服务
- CSS3 -webkit-filter 滤镜
- Docker+Jenkins持续集成环境(3)集成PMD、FindBugs、Checkstyle静态代码检查工具并邮件发送检查结果
- Javascript中的Label语句
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 07 . Prometheus监控Memcached并配置Grafana
- 内置函数 -- bytes -- 字节码与字符串相互转换
- 01 . Shell详细入门介绍及简单应用
- 06 . Prometheus监控Redis并配置Grafana
- Django实现图片上传并前端页面显示
- 04 . Prometheus(联邦集群)监控MySQL
- 01 . MongoDB简介及部署配置
- 06 . Jenkins分布式构建和Pipline
- 05 . ELK Stack简介原理及部署应用
- java编程思想第四版第三章要点习题
- GoAccess分析Web日志
- java编程思想第四版第三章要点总结
- 05 . Prometheus监控Nginx
- java编程思想第四版第五章总结
- 01 . 容器编排简介及Kubernetes核心概念