Object常用方法、原型链、面向对象随笔
面向对象
- Object对象常用方法
- 原型和原型链
- es6构造函数
- es6静态属性和方法
Object对象常用方法
Object.assign() 1个值拷贝,两个值改变第一项合并,三个值以上改变第一项合并,可以用空对象代替第一项Object.defineProperty() 设置对象属性。值1为对象名,值2为对象属性,值3为设置属性configurable:false 不能删除属性 ,true可以删除属性(默认false)enumerable:false 为不能枚举,true为可枚举(默认false,为false则不能遍历)value 改变属性值writable:false 不能改变属性值,true可以改变属性值(默认false)get() 获取该属性时,会调用get方法set() 设置该属性时,会调用set方法Object.entries() 将对象转为二维数组(仅限可枚举属性)Object.keys() 获取对象所有键(仅限可枚举属性)Object.values() 获取对象所有值(仅限可枚举属性)Object.getOwnPropertyNames(obj) 获取对象所有键(包括不可枚举属性)Object.freeze() 对象冻结,即对象不能被改变了Object.is() 判断两个值是否相等,类似于===(特例两个NaN用is比较是相等的,正负零用is比较是不相等的)Object.getPrototypeOf() 获取对象原型Object.setPrototypeOf() 设置对象原型对象名.hasOwnProperty(属性) 判断对象是否包含某个属性
let obj = {a: 1,b: 2}Object.defineProperty(obj, "a", {configurable: false,enumerable: false,value: 5,writable: false})for (var k in obj) {console.log(k) //b 因为obj的a的enumerable为false,所以不能遍历a}console.log(obj); //{b:2;a:5} 设置a的值为5了Object.defineProperty(obj, "c", {// enumerable: true,value: 4})console.log(obj); //{b: 2, a: 5, c: 4}let objarr = Object.entries(obj);console.log(objarr)let objallkey = Object.keys(obj);console.log(objallkey) //["b"] 因为a和c都不是可枚举属性。b是原生的,所以可枚举let objallval = Object.values(obj);console.log(objallval) //[2]let allkeys = Object.getOwnPropertyNames(obj);console.log(allkeys); //["a","b","c"] 获取对象所有键,包括不可枚举的Object.freeze(obj)// Object.getPrototypeOf()// Object.setPrototypeOf()function Person(name) {this.name = name;}Person.prototype.syaName = function () {console.log(this.name)}function banban(name, age) {Person.call(this, name); //call ,修改this指向为namethis.age = age;}//将banban的原型设置为Person的原型Object.setPrototypeOf(banban.prototype, Person.prototype) let yanyan = new banban("kuku", 18);console.log(yanyan)//banban{name:"kuku",age:18}原型中有Person,Person的原型中有sasNamelet obj2 = {a: 4,b: 5,c: 6}console.log(obj2.hasOwnProperty("c")); //true 对象包含c这个属性
原型和原型链
- 原型:(自己写都是prototype,打印台都是_proto)
所有function函数共用的属性 prototype
所有对象共用的属性 _ proto _ - 原型链:对象通过prototype找到共有的属性
let A = function(){}
let a = new A();
对象a的属性中没有的,则找A.ptototype中共有的,没有则再找Object.prototype中共有的,再没有就确实没有了为null
es6构造函数
- 继承要改写父类构造方法,需要加上super(父类构造函数参数)
- 继承要重写父类方法,直接改就行
class Person {//有参构造constructor(name, age) {this.name = name;this.age = age;}//直接写在类中的方法都会加载到原型中(原型:prototype/ _proto_)chat(content) {console.log(this.name + "说了" + content);}}//继承//在子类中不写 constructor 会直接继承父类的 constructorclass Girl extends Person {//子类要重新定义构造函数时,需要加super()//并且super()中要加上,父类构造函数的形参//子类新增形参:同样需要this处理constructor(name, age, job) { super(name, age);this.job = job;}//改写方法,直接改!chat() {console.log(this.name + "说了");}}let p = new Person("小三", 18);console.log(p);let g = new Girl("傻女子", 3, "代购");console.log(g);
es6静态属性和方法
- 静态属性和方法前面加上static
- 静态只能通过类名调用
- 静态不能被继承
class Person {//有参构造constructor(name, age) {this.name = name;this.age = age;}//直接写在类中的方法都会加载到原型中(原型:prototype/ _proto_)chat(content) {console.log(this.name + "说了" + content);}//静态方法需要在方法前加 static 并且调用时用类名调用static like() {console.log(this.name);}}let p = new Person("kk", 18);console.log(p.chat);console.log(Person.like);
Object常用方法、原型链、面向对象随笔相关推荐
- 原型和原型链的理解(Function,Object特例深入理解)
原型我们可以分为显式原型和隐式原型. 显式原型: 每个函数都有一个prototype属性,即显式原型(属性),它默认指向一个object空对象(称为原型对象): 而原型对象中有一个属性construc ...
- [我的理解]Javascript的原型与原型链
一.原型与原型链的定义 原型:为其他对象提供共享属性的对象 注:当构造器创建一个对象,为了解决对象的属性引用,该对象会隐式引用构造器的"prototype"属性.程序通过const ...
- 深入理解构造函数和原型链
使用构造函数初始化对象的过程 function Base(){} //函数声明 var base=new Base() //对象初始化 执行Base()的过程: 创建一个名为Base的function ...
- Kibana未授权访问漏洞记录(CVE-2019-7609,Kibana的RCE,原型链污染,端口:5601)
Kibana介绍 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的.你可以用kibana搜索.查看存放在Elasticsearch中的数据.Kibana与E ...
- 对于原型链的彻底理解
先看以下代码,下面这两个运算返回的结果是一样的: Function instanceof Object;//true Object instanceof Function;//true 复制代码 这个 ...
- 原型链上的__proto__和protoptype
propotype 每一个函数都有一个propotype属性 propo 每一个实例对象都有一个_propo_,且指向对象的构造函数的propotype construct 每一个实例原型都有一个构造 ...
- 2.03.05 原型与原型链
2.03.05 原型 与 原型链 1.构造函数的弊端 介绍:构造函数方法很好用,但是存在一个浪费内存的问题.我们以Dog对象为例: function Dog(name, breed, weight) ...
- 图解原型链及其继承优缺点
原型链 上篇文章中我们介绍了原型链的概念,即每个对象拥有一个原型对象,通过__proto__ 指针指向上一个原型 ,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向 null, ...
- 原型和原型链的理解(有图清晰明了)
记住一句话:万物皆对象 对于原型和原型链,我们要知道一下几个:函数对象,实例对象.原型对象 1)函数对象--就是平时称的对象: 2)实例对象--new出的对象或者{ }: 3)原型对象--所有的函数对 ...
- 对js原型和原型链的理解
学习到 JavaScript 原型这个地方的时候,最开始是比较懵的状态,今天早上起来看了下红宝书中对于原型的解释,慢慢的也就有了些了解,但是解释的比较官方.接下来,我会把自己的理解分享下来,尽量用通俗 ...
最新文章
- 20个经典要诀学好英语
- linux7安装haproxy,Centos7 源码编译安装haproxy
- tableau实战系列(三十四)-教你如何在tableau中实现3D效果作图
- Java执行存储过程
- 把base64转为blob
- 宁滨院士生前最后一场学术报告
- USACO-Section2.2 Subset Sums
- 设计模式学习笔记——模板(Template)模式
- 中国2017 Google 开发者大会第二天简单回顾
- 调试蓝牙串口模块HC-05
- ATmega16 单片机 AVR单片机 直流电机调速器
- Sass!默认和主题化的设计系统
- python模块xlutils如何下载_Python-如何安装xlutils?
- 哈雷haley教你如何用你的手机测试你的移动端项目
- C++中std::setw()的用法
- (纯小白)Python简单爬取图片
- 小程序云开发,CMS内容管理系统
- pmp证书报考流程+pmp备考+pmp学习干货+pmp指南汇总
- cncrypt安卓版_CnCrypt Protect
- 【转】蔡文胜:微博的开放和公正性给开发者更好机会