重学第六章

1. 原型

  • 实例内属性和原型上属性重名时(屏蔽)
function Test(name) {this.name = name
}
Test.prototype.name = 'hhh'
let tObj = new Test('yyy')
console.log(tObj.name) // yyy
tObj.name = null
console.log(tObj.name) // null
delete tObj.name
console.log(tObj.name) // hhh
  • 实例的__proto__属性指向的对象有constructor属性,指向构造函数
function Test() {}
let tObj = new Test()
console.log('实例', tObj)
console.log('constructor', tObj.constructor)
console.log(tObj.constructor === tObj.__proto__.constructor)

  • 实例(实例化的时候)的__proto__ 和构造函数的prototype全等,
function Test() {}
Test.prototype.name = 'name'
let tObj = new Test()
console.log('实例', tObj)
console.log('实例__proto__', tObj.__proto__)
console.log('prototype', Test.prototype)
console.log(tObj.__proto__ == Test.prototype)


  • 切断了prototype 和 __proto__的联系,并且丢失了constructor

  • 手动在字面量里添加constructor会让这个属性的[[Enumerabl]]变为true

  • 可用Object.defineProperty(Car.prototype,constructor,{
    enumerable:false,value:Car})





    不加debugger

  • 在实例化之后再改prototype (跟实例化前后也有点关系)

function Test() { }
Test.prototype.name = 'hhh'
Test.prototype = {name: '111'
}
let tObj = new Test()
Test.prototype.name = '666'
console.log(tObj.name) // 666
console.log(tObj.__proto__ === Test.prototype) // true
console.log(Test.prototype.isPrototypeOf(tObj)) // true
function Test() { }
Test.prototype.name = 'hhh'
Test.prototype = {name: '111'
}
let tObj = new Test()
Test.prototype = {name: '666'
}
console.log(tObj.name) // 111
console.log(tObj.__proto__ === Test.prototype) // false
console.log(Test.prototype.isPrototypeOf(tObj)) // false

2. 插件开发

  • 放在IIFE里,能隔离作用域
; (function () {function Compute(a, b) {this.a = athis.b = b}Compute.prototype.plus = function () {return this.a + this.b}Compute.prototype.minus = function () {return this.a - this.b}Compute.prototype.multi = function () {return this.a * this.b}Compute.prototype.div = function () {return this.a / this.b}window.Compute = Compute
})()
let computeObj = new Compute(8, 2)
console.log('加', computeObj.plus()) // 10
console.log('减', computeObj.minus()) // 6
console.log('乘', computeObj.multi()) // 16
console.log('除', computeObj.div()) // 4

ES5-10 原型、原型链、闭包立即执行函数、插件开发相关推荐

  1. 原型 继承 原型链 闭包

    javascript继承的 6 种方法 原型链继承 借用构造函数继承 组合继承(原型+借用构造) 原型式继承 寄生式继承 寄生组合式继承 说一下你对原型与原型链的了解度,有几种方式可以实现继承,用原型 ...

  2. JS难点剖析-原型原型链

    2019独角兽企业重金招聘Python工程师标准>>> js的原型&原型链&闭包,在很多人看来是区分JS程序员水平的关键知识点,当然对这句话我不是十分赞同.但是掌握这 ...

  3. 闭包、执行环境、作用域链

    闭包是指有权访问另一个函数作用域中的变量的函数,创建的常见方式就是在一个函数内部创建另一个函数. 我们来理解下执行环境和作用域链: 1.执行环境有全局执行环境和函数执行环境之分. 2.每次进入一个新的 ...

  4. js 预编译 解释执行 作用域链 闭包

    <script>var a,b = 1;function c(x){var aa = 2;function d(){var ab = 3;}}var d = function(){//.. ...

  5. JavaScript执行环境 + 变量对象 + 作用域链 + 闭包

    闭包真的是一个谈烂掉的内容.说到闭包,自然就涉及到执行环境.变量对象以及作用域链.汤姆大叔翻译的<深入理解JavaScript系列>很好,帮我解决了一直以来似懂非懂的很多问题,包括闭包.下 ...

  6. JavaScript——原型/原型链中的顶层对象(图解)

    本篇需要提前了解的知识储备:原型和原型链,以下仅概要介绍,不作详细讲解. 详细学习可参考: JavaScript--面向对象(封装):https://blog.csdn.net/qq_29493173 ...

  7. js原型和原型链_初识JS原型/原型链/原型继承

    本文思路: 原型->原型链->原型继承->基于原型的继承/ES6中的继承->__proto__与prototype 首先我们知道JS中有对象,比如: var 但是在我们没有对这 ...

  8. JavaScript 原型 原型链

    JavaScript 原型 本文讲介绍JavaScript原型 以及JavaScript的原型链 JS中的原型和原型链 所有的引用类型(数组.函数.对象)可以自由扩展属性(除null以外) 所有的函数 ...

  9. 最受产品经理关注的10个原型设计工具

    每个公司对产品经理这个职位的定位都会有所不同,但一般都会涉及到需求调研.画原型.写各种文档等工作.说到画原型图,原型设计工具是必不可少的. 当然了,如果你已经上升到了产品经理的最高境界,那这些工具对你 ...

最新文章

  1. 高精度垃圾分类模型开发与硬件集成
  2. R语言进行主成分分析(PCA):使用prcomp函数来做主成分分析、使用summary函数查看主成分分析的结果、计算每个主成分解释方差的、每个主成分解释的方差的比例、以及多个主成分累积解释的方差比例
  3. 【原创】强化学习精选资料汇总:从入门到精通,看完这些干货就够啦!
  4. 主程的晋升攻略(1):重要的引言
  5. ML:MLOps系列讲解之《CRISP-ML (Q)ML生命周期过程—了解机器学习开发的标准过程模型—业务和数据理解→数据工程(数据准备)→ML模型工程→评估ML模型→模型部署→模型监控和维护》解读
  6. html5变动标签新写法,Html5新标签解释及用法
  7. 魅力 .NET:从 Mono、.NET Core 说起
  8. linux 同步IO: sync msync、fsync、fdatasync与 fflush
  9. 行啊,人工智能玩大了!
  10. 【GPU加速系列】PyCUDA(一):上手简单操作
  11. Java多线程---线程通信(wait,notifyAll,生产者消费者经典范式,owner wait set,自定义显式锁BooleanLock)
  12. 资源放送丨数据安全:Oracle多场景下比特币勒索的揭密与恢复实战
  13. CSS文本溢出的处理方法总结
  14. MySQL中各种日期格式转换
  15. android Launcher——拖放功能深入研究
  16. Android之——图片的内存优化
  17. 团队-学生成绩管理-模块开发过程
  18. Android中Parcelable和Serializable接口用法
  19. 将voc2007数据集转换成yolo格式的数据集
  20. 【必备知识】线激光扫描三维成像原理

热门文章

  1. mendeley引用参考文献不显示_免费文献管理器Mendeley
  2. python 设计模式 观察者_设计模式Python实现-观察者模式
  3. imp oracle full,Oracle 10g imp 之 full database (转官档)
  4. C++——lambda表达式
  5. Ubuntu15.04 64位安装Theano(已经测试可执行)
  6. 修改Jupyter的工作空间
  7. 我之理解---计时器setTimeout 和clearTimeout
  8. 提交MTBF eservice以及log注意事项
  9. Apache Directory 指令
  10. USE PDFCREATE TO CREATE A PDF FILE