• JS对象与原型链


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

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

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

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

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

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

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

    三:原型链

    var obj = {}
    obj.__proto__ == Object.prototype
    
    function mySelf(){
    }
    var a = new mySelf()
    a.__proto__ == mySelf.prototype
    mySelf.prototype.__proto__ == Object.prototype
    mySelf.__proto__ == Function.prototype
    Object.prototype.__proto__ == null
    Function.prototype.__proto__ == Object.prototype

    四:对象的属性

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

    似乎规则和上面的相反

    不忘初心,不负梦想
  • 相关阅读:
    修改手机端radio 样式
    css ul li 左对齐,换行
    8- 类
    virtualbox虚拟机上网方式
    HTTP请求头详解
    出差总结-2017-11-24
    Some characters cannot be mapped using "GBK" ...
    tortoisesvn与eclipse-svn的删除操作区别
    sql
    setInterval方法, clearInterval
  • 原文地址:https://www.cnblogs.com/panrui1994/p/9396935.html
Copyright © 2020-2023  润新知