每个函数都存在一个prototype的属性,然后这个属性值为一个对象,我们称之为原型对象

每个对象都存在着一个隐藏的属性"__proto__" 这个属性引用了创建这个对象的函数的prototype

  1. 1:Object对象是由Function函数创建的
  2. Object.__proto__ == Function.prototype
  3.  
  4. 2:Object的原型对象指向空
  5. Object.prototype.__proto__ == null
  6.  
  7. 3:Function对象由他自己本身创建
  8. Function.prototype == Function.__proto__
  9.  
  10. 4:其他的普通对象最终指向的都是Object
  11. Function.prototype.__proto__ == Object.prototype

一:Object原型对象上面的属性

  1. 1:Constructor:保存着创建当前对象的函数;
  2.  
  3. 2:hasOwnProperty(propertyName):检查属性是否在当前对象实例中,而不是在实例的原型中,且参数必须以字符串的形式指定
  4.  
  5. 3:isPrototypeOf:测试一个对象是否存在于另一个对象的原型链上;
  6.  
  7. 4:propertyIsEnumerable:某个属性是否能够使用for...in语句来枚举
  8.  
  9. 5:toLocaleString:返回一个该对象的字符串表示,该字符串与执行环境的地区对应;
  10.  
  11. 6:toString:返回对象的字符串表示;
  12.  
  13. 7:valueOf:返回对象的字符串,数值,或者布尔值表示,通常与toString方法的返回值相同。
  14.  
  15. 8:__defineGetter__:
  16.  
  17. 9:__defineSetter__:
  18.  
  19. 10:__lookupGetter__:
  20.  
  21. 11:__lookupSetter__:
  22.  
  23. 12:get __proto__:
  24.  
  25. 13:set __proto__:

二:Object函数与Function本身拥有的属性

  1. Object函数拥有的方法
  2.  
  3. 1:assign() 将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象
  4. const object2 = Object.assign({c: 4, d: 5}, object1);
  5.  
  6. 2:create() 使用现有的对象来提供新创建的对象的__proto__
  7. const person = {
  8. isHuman: false,
  9. printIntroduction: function () {
  10. console.log(`My name is ${this.name}. Am I human? ${this.isHuman}`);
  11. }
  12. };
  13.  
  14. const me = Object.create(person);
  15.  
  16. 3:defineProperties 在一个对象上定义新的属性或修改现有属性,并返回该对象
  17. Object.defineProperties(obj, props)
  18.  
  19. 4:defineProperty 法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象
  20. Object.defineProperty(obj, prop, descriptor)
  21.  
  22. 5:entries 方法返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for...in 循环遍历该对象时返回的顺序一致(区别在于 for-in 循环也枚举原型链中的属性)
  23. const object1 = { foo: 'bar', baz: 42 };
  24. console.log(Object.entries(object1)[1]);
  25.  
  26. 6:freeze 方法可以冻结一个对象 冻结指的是不能向这个对象添加新的属性,修改现有的属性
  27. const object1 = {
  28. property1: 42
  29. };
  30.  
  31. const object2 = Object.freeze(object1);
  32.  
  33. 7:getOwnPropertyNames 返回一个由指定对象的所有自身属性的属性名(包括不可枚举属性但不包括Symbol值作为名称的属性)组成的数组
  34.  
  35. 8:getOwnPropertySymbols 方法返回一个给定对象自身的所有 Symbol 属性的数组
  36.  
  37. 9:getPrototypeOf 方法返回指定对象的原型
  38.  
  39. 10:keys 会返回一个由一个给定对象的自身可枚举属性组成的数组
  1. 1:arguments 表传入函数的实参,它是一个类数组对象
  2. function.arguments 已经被废弃了, 现在推荐的做法是使用函数内部可用的 arguments 对象来访问函数的实参
  3.  
  4. 2:caller 返回调用指定函数的函数
  5. 该属性的常用形式arguments.callee.caller替代了被废弃的 arguments.caller
  6.  
  7. 3:displayName 获取函数的显示名称
  8.  
  9. 4:length 指明函数的形参个数
  10. 本来应该传递的参数的个数
  11. 实际传递的:arguments.length 是函数被调用时实际传参的个数
  12.  
  13. 5:name 返回函数实例的名称
  14.  
  15. 6:apply 调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数
  16. func.apply(thisArg, [argsArray])
  17.  
  18. 7:call 调用一个函数, 其具有一个指定的this值和分别地提供的参数(参数的列表)
  19. fun.call(thisArg, arg1, arg2, ...)
  20.  
  21. 8:bind 创建一个新的函数,新函数与被调函数(绑定函数的目标函数)具有相同的函数体, 当被调用时,将其this关键字设置为提供的值
  22. fun.bind(thisArg[, arg1[, arg2[, ...]]])

三:原型链

  1. var obj = {}
  2. obj.__proto__ == Object.prototype
  3.  
  4. function mySelf(){
  5. }
  6. var a = new mySelf()
  7. a.__proto__ == mySelf.prototype
  8. mySelf.prototype.__proto__ == Object.prototype
  9. mySelf.__proto__ == Function.prototype
  10. Object.prototype.__proto__ == null
  11. Function.prototype.__proto__ == Object.prototype

四:对象的属性

  1. let obj = {
  2. name:'panrui',
  3. age:24
  4. }
  5. console.log(obj)
  6. 注释:
  7. 1对象本身所拥有的属性,或者从原型链上去继承的属性
  8. 2属性当中可枚举的属性 通过for...in可遍历出来的,以及不可枚举的属性
  9. 3属性当中又分为keySymbol的和不为Symbol的属性

五:Instanceof的判断

A Instanceof B

Instanceof的判断队则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false

isPrototypeOf:isPrototypeOf() 与 instanceof 运算符不同。在表达式 "object instanceof AFunction"中,object 的原型链是针对 AFunction.prototype 进行检查的,而不是针对 AFunction 本身

Baz.prototype.isPrototypeOf(baz)  验证baz是不是在Baz的原型链上面

似乎规则和上面的相反

JS对象与原型链的更多相关文章

  1. 深入理解JS对象和原型链

    函数在整个js中是最复杂也是最重要的知识 一个函数中存在多面性: 1.它本身就是一个普通的函数,执行的时候形成的私有作用域(闭包),形参赋值,预解释,代码执行,执行完 成后栈内存销毁/不销毁. 2.& ...

  2. JS对象、原型链

    忘记在哪里看到过,有人说鉴别一个人是否 js 入门的标准就是看他有没有理解 js 原型,所以第一篇总结就从这里出发. 对象 JavaScript 是一种基于对象的编程语言,但它与一般面向对象的编程语言 ...

  3. JS对象与原型

    一. JS的对象 1.1 创建对象的几种方式 1.1.1 通过字面量创建对象 在js中,一对{} 其实就是一个对象 var person = { name: "tom", age: ...

  4. JS核心系列:浅谈原型对象和原型链

    在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象(Object)和函数对象(Function). 一般而言,通过new Function产生的对象是函数对象,其他对 ...

  5. JS高级. 03 混入式继承/原型继承/经典继承、拓展内置对象、原型链、创建函数的方式、arguments、eval、静态成员、实例成员、instanceof/是否在同一个原型链

    继承:当前对象没有的属性和方法,别人有,拿来给自己用,就是继承 1 混入式继承 var I={ }; var obj = { name: 'jack', age:18, sayGoodbye : fu ...

  6. 1--面试总结-js深入理解,对象,原型链,构造函数,执行上下文堆栈,执行上下文,变量对象,活动对象,作用域链,闭包,This

    参考一手资料:http://dmitrysoshnikov.com/ecmascript/javascript-the-core/中文翻译版本:https://zhuanlan.zhihu.com/p ...

  7. JS面向对象之原型链

      对象的原型链 只要是对象就有原型 原型也是对象 只要是对象就有原型, 并且原型也是对象, 因此只要定义了一个对象, 那么就可以找到他的原型, 如此反复, 就可以构成一个对象的序列, 这个结构就被成 ...

  8. 三张图较为好理解JavaScript的原型对象与原型链

    最近从网上看到别人详细得讲解了js的原型对象和原型链,看完感觉是看得最清晰的一个,于是,摘录到自己博客里 对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与_ ...

  9. javascript进阶-《原型对象和原型链》

    原创发布 by @一像素 2015.12 在Javascript中,万物皆对象,但对象也有区别,大致可以分为两类,即:普通对象Object 和 函数对象Function. 一般而言,通过new Fun ...

随机推荐

  1. 满汉全席[2-SAT]

    题面 对不起我又写了一个板题qvq 和洛谷那道模板题没区别...两样菜至少做一样即可 不过注意define和函数的区别!!! #include <cmath> #include <c ...

  2. django restframework permission

    与 authentication 和 throttling 一起,permission 决定是应该接受还是拒绝访问请求.权限检查总是在视图的最开始处运行,在任何其他代码被允许进行之前.权限检查通常会使 ...

  3. ADO.NET中的五大内置对象

    ADO.NET中的五大内置对象 学习链接:https://blog.csdn.net/wxr15732623310/article/details/51828677

  4. EXCEL(1)级联下拉框

    EXCEL级联下拉框 http://jingyan.baidu.com/article/3c343ff756e0cf0d377963f9.html 在输入一些多级项目时,如果输入前一级内容后,能够自动 ...

  5. 针对主机CPU idle性能情况需求脚本编写

    [环境介绍] 系统环境:Linux + osw + python 2.7.10 [背景描述] 需求:当系统服务器出现性能告警的时候,需要定位具体的时间点来进行有针对性的去查询产生的问题.OSW提供了很 ...

  6. [物理学与PDEs]第1章习题1 无限长直线的电场强度与电势

    设有一均匀分布着电荷的无限长直线, 其上的电荷线密度 (即单位长度上的电荷量) 为 $\sigma$. 试求该直线所形成的电场的电场强度及电势. 解答: 设空间上点 $P$ 到直线的距离为 $r$, ...

  7. Karma (Test runner)

    Karma https://baike.baidu.com/item/%E7%BE%AF%E7%A3%A8/7618552?fromtitle=Karma&fromid=878453 1,意译 ...

  8. UOJ #109「APIO2013」TASKSAUTHOR

    貌似是最入门的题答题 刚好我就是入门选手 就这样吧 UOJ #109 题意 太热了不讲了 $ Solution$ 第一个点:$ 105$个数字卡掉$ Floyd$ 直接$101$个点无出边一次询问就好 ...

  9. php7 + 新特性 部分

    三目运算符: 以前:$type = isset($_GET['type']) ? $_GET['type'] : '测试'; php7.0: $type = $_GET['type'] ?? '测试' ...

  10. docker时间和本地时间不一致的问题

    前言: 在本地执行date 和登录docker后的date显示的时间不一致,差一天多,不是8个小时 参考:戳这儿 先重启,查看后发现差8个小时 用里面cp localtime 再重启还是差8个小时 试 ...