面向对象

  • 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. Markdown学习之路
  2. php 动态加载扩展,仿照PHP的实现简单的扩展动态加载
  3. 安全退出调用多个Activity的Application
  4. 静态代码分析——字符串
  5. 【Android 异步操作】Handler 机制 ( MessageQueue 消息队列的阻塞机制 | Java 层机制 | native 层阻塞机制 | native 层解除阻塞机制 )
  6. 深度学习核心技术精讲100篇(二十八)-由浅入深概览机器学习优化算法
  7. 博客目录列表(C与Linux部分)
  8. Fiddler抓包详解
  9. C#实现不安装Oracle客户端访问远程服务器数据
  10. Android API 实验记录 (二)
  11. NXP iMX8系列处理器核心性能对比测试
  12. stdafx有什么用(包含相关问题分析)
  13. win7如何设置通电自动开机_win7系统设置自动开机
  14. 163手机登录邮箱显示服务器无法登录,163邮箱登陆不了_为何无法正常登录邮箱 ?...
  15. 当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?其实可以不必这么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法来验证通过。 该校验的过程:1、从卡号最后一位数字开始,逆
  16. Android亮屏和熄屏控制
  17. 20051111: 最近玩WOW好像太多了
  18. Zotero——实现多台电脑上云端同步
  19. 教你 P 照片:十五步把一张普通照片处理得很有质感
  20. pos机软件测试,联迪pos机测试软件

热门文章

  1. 如何给PKHeX添加剑盾洞穴查询插件PKHeX_Raid_Plugin
  2. 二阶锥松弛在配电网最优潮流计算中的应用(IEEE33节点配电网最优潮流算例matlab程序)(yalmip+cplex)
  3. python中进行数据分割的函数
  4. 百思不得姐网站 Scrapy爬虫笔记
  5. python 多线程爬取 百思不得姐段子
  6. 解决pyCharm界面的中文显示乱码的问题
  7. 各种各样装修风格的茶室特点
  8. jkl播放器android,三星播放器的小BUG
  9. 成都python培训费用多少
  10. 潭州课堂25班:Ph201805201 django框架 第一课 环境搭建 (课堂笔记)