面向对象

  • 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这个属性

原型和原型链

  1. 原型:(自己写都是prototype,打印台都是_proto)
    所有function函数共用的属性 prototype
    所有对象共用的属性 _ proto _
  2. 原型链:对象通过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常用方法、原型链、面向对象随笔相关推荐

  1. 原型和原型链的理解(Function,Object特例深入理解)

    原型我们可以分为显式原型和隐式原型. 显式原型: 每个函数都有一个prototype属性,即显式原型(属性),它默认指向一个object空对象(称为原型对象): 而原型对象中有一个属性construc ...

  2. [我的理解]Javascript的原型与原型链

    一.原型与原型链的定义 原型:为其他对象提供共享属性的对象 注:当构造器创建一个对象,为了解决对象的属性引用,该对象会隐式引用构造器的"prototype"属性.程序通过const ...

  3. 深入理解构造函数和原型链

    使用构造函数初始化对象的过程 function Base(){} //函数声明 var base=new Base() //对象初始化 执行Base()的过程: 创建一个名为Base的function ...

  4. Kibana未授权访问漏洞记录(CVE-2019-7609,Kibana的RCE,原型链污染,端口:5601)

    Kibana介绍 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的.你可以用kibana搜索.查看存放在Elasticsearch中的数据.Kibana与E ...

  5. 对于原型链的彻底理解

    先看以下代码,下面这两个运算返回的结果是一样的: Function instanceof Object;//true Object instanceof Function;//true 复制代码 这个 ...

  6. 原型链上的__proto__和protoptype

    propotype 每一个函数都有一个propotype属性 propo 每一个实例对象都有一个_propo_,且指向对象的构造函数的propotype construct 每一个实例原型都有一个构造 ...

  7. 2.03.05 原型与原型链

    2.03.05 原型 与 原型链 1.构造函数的弊端 介绍:构造函数方法很好用,但是存在一个浪费内存的问题.我们以Dog对象为例: function Dog(name, breed, weight) ...

  8. 图解原型链及其继承优缺点

    原型链 上篇文章中我们介绍了原型链的概念,即每个对象拥有一个原型对象,通过__proto__ 指针指向上一个原型 ,并从中继承方法和属性,同时原型对象也可能拥有原型,这样一层一层,最终指向 null, ...

  9. 原型和原型链的理解(有图清晰明了)

    记住一句话:万物皆对象 对于原型和原型链,我们要知道一下几个:函数对象,实例对象.原型对象 1)函数对象--就是平时称的对象: 2)实例对象--new出的对象或者{ }: 3)原型对象--所有的函数对 ...

  10. 对js原型和原型链的理解

    学习到 JavaScript 原型这个地方的时候,最开始是比较懵的状态,今天早上起来看了下红宝书中对于原型的解释,慢慢的也就有了些了解,但是解释的比较官方.接下来,我会把自己的理解分享下来,尽量用通俗 ...

最新文章

  1. 20个经典要诀学好英语
  2. linux7安装haproxy,Centos7 源码编译安装haproxy
  3. tableau实战系列(三十四)-教你如何在tableau中实现3D效果作图
  4. Java执行存储过程
  5. 把base64转为blob
  6. 宁滨院士生前最后一场学术报告
  7. USACO-Section2.2 Subset Sums
  8. 设计模式学习笔记——模板(Template)模式
  9. 中国2017 Google 开发者大会第二天简单回顾
  10. 调试蓝牙串口模块HC-05
  11. ATmega16 单片机 AVR单片机 直流电机调速器
  12. Sass!默认和主题化的设计系统
  13. python模块xlutils如何下载_Python-如何安装xlutils?
  14. 哈雷haley教你如何用你的手机测试你的移动端项目
  15. C++中std::setw()的用法
  16. (纯小白)Python简单爬取图片
  17. 小程序云开发,CMS内容管理系统
  18. pmp证书报考流程+pmp备考+pmp学习干货+pmp指南汇总
  19. cncrypt安卓版_CnCrypt Protect
  20. 【转】蔡文胜:微博的开放和公正性给开发者更好机会

热门文章

  1. C++非递归算法遍历二叉链表
  2. 必知必会:计算机指令
  3. Android四大组件:广播机制——BroadcastReceiver
  4. 【文献阅读】Graph-Based Visual Saliency部分翻译
  5. uni-app 引入 mapbox地图
  6. LeetCode 535. TinyURL 的加密与解密
  7. 两次点击会出现undefine
  8. 强强联手 | 博泰车联网与黑莓达成战略合作
  9. 查看Linux系统是UBUNTU还是CentOS的方法
  10. redis/dubbo/poi/quartz笔记