精华内容
下载资源
问答
  • Js原型链

    2019-03-26 22:23:41
  • Js 原型链

    2019-04-02 10:29:35
    Js 原型链 参考网址:Js 原型链 小测试检验js 原型链的理解: person1.__proto__ 是什么? Person.__proto__ 是什么? Person.prototype.__proto__ 是什么? Object.__proto__ 是什么? Object.prototype.__proto...

    Js 原型链

    参考网址:
    Js 原型链
    Web前端------JS原型、原型链详解

    网络上的经典图:

    自己绘制的图:

    Part 1

    小测试检验js 原型链的理解:

    1. person1.__proto__ 是什么?
    2. Person.__proto__ 是什么?
    3. Person.prototype.__proto__ 是什么?
    4. Object.__proto__ 是什么?
    5. Object.prototype.__proto__ 是什么?

    答案:
    第一题:
    因为person1.__proto__ === person1 的构造函数.prototype
    因为person1的构造函数 === Person
    所以person1.__proto__ === Person.prototype

    第二题:
    因为Person.__proto__ === Person的构造函数.prototype
    因为Person的构造函数 === Function
    所以Person.__proto__ === Function.prototype

    第三题:
    Person.prototype 是一个普通对象,我们无需关注它有哪些属性,只要记住它是一个普通对象。
    因为一个普通对象的构造函数 === Object
    所以 Person.prototype.__proto__ === Object.prototype

    第四题,参照第二题,因为 Person 和 Object 一样都是构造函数

    第五题:
    Object.prototype 对象也有proto属性,但它比较特殊,为 null 。因为 null 处于原型链的顶端,这个只能记住。
    Object.prototype.__proto__ === null

    Part 2

    在原型链上查找属性比较耗时,对性能有副作用,这在性能要求苛刻的情况下很重要。另外,试图访问不存在的属性时会遍历整个原型链。

    hasOwnProperty 是 JavaScript 中处理属性并且不会遍历原型链的方法之一。(另一种方法: Object.keys())

    prototypeObject.getPrototypeOf 的使用

    function A(){}
    A.prototype = {
    	doSomething: function(){
    		// ...
    	}
    }
    var a1 = new A();
    var a2 = new A();
    

    像上面的例子中, a1.doSomething 事实上会指向 Object.getPrototypeOf(a1).doSomething,它就是你在 A.prototype.doSomething 中定义的内容。

    也就是说:Object.getPrototypeOf(a1).doSomething == Object.getPrototypeOf(a2).doSomething == A.prototype.doSomething

    【补充:实际上当执行a1.doSomething() 相当于执行Object.getPrototypeOf(a1).doSomething.call(a1)==A.prototype.doSomething.call(a1)

    简而言之, prototype 是用于类的,而 Object.getPrototypeOf() 是用于实例的(instances),两者功能一致。

    (待补充)
    至此,结束。

    展开全文
  • JS原型链

    2020-09-11 10:20:23
    JS原型链 js的大部分元素(数组、函数、对象等)都属于对象,因此他就会有属性,可以分为自身属性(通过方法obj.hasOwnProperty('prop');获取)和继承属性。 自身属性:1. 每个对象都有一个方法hasOwnProperty()来...

    JS原型链

    js的大部分元素(数组、函数、对象等)都属于对象,因此他就会有属性,可以分为自身属性(通过方法obj.hasOwnProperty('prop');获取)和继承属性。

    自身属性:1. 每个对象都有一个方法hasOwnProperty()来检查对象本身是否有某个属性,如果有则返回true;如果这个属性在它的原型链上或原型链上都没有,则返回false;2.当hasOwnProperty被作为一个属性名存在对象中的时候,上述获取方法失效,可通过原型来获取Object.prototype.hasOwnProperty.call(foo, 'bar'); // true

    当js在一个对象中找不到需要的属性时,它会到这个对象的父对象上去找,以此类推,这就构成了对象的原型链。

    function Foo(_name) {
      this.name = _name;
    }
    //将共同的方法放到Foo.prototype中
    Foo.prototype.show = function() {  
      console.log('I am ', this.name);
    };
    var f1 = new Foo('obj1');
    var f2 = new Foo('obj2');
    f1.show();  //  I am obj1
    f2.show();  //  I am obj2
    
    

    调用原型属性过程如下图所示:
    在这里插入图片描述
    F1中没有show(),所以通过f1的原型(__proto__指向的对象)中找,找到就用。
    请注意__proto__与prototype的区别!__proto__才是真正连接原型链的东西,而prototype只是构造函数的一个指针属性而已。
    所有的函数都以function Function()为构造函数,因此,所有函数(包括function Function()和function Object())的__proto__都指向Function.prototype这个对象。
    (区分函数和构造函数)
    Function.prototype这个对象,它就是一个普通的对象,它的构造函数是js内置的function Object(),function Object()的prototype指向Object.prototype,因此Function.prototype.__proto__就指向Object.prototype,这个对象中定义了所有对象共有的属性,比如我们之前说的hasOwnProperty()toString()等。

    Object.prototype就是原型链的终点了,它的__proto__是null,js查找属性时,如果到这里还没有找到,那就是undefined了。

    展开全文
  • js原型链

    2020-04-03 16:03:26
    js原型链 说到原型链,首先有这几个概念需要了解,原型对象,构造函数,实例对象 JS规定:每一个构造函数都有一个prototype属性,指向一个对象,注意这个prototype就是一个对象,叫做原型对象。这个对象的所有属性和...

    js原型链

    说到原型链,首先有这几个概念需要了解,原型对象,构造函数,实例对象

    JS规定:每一个构造函数都有一个prototype属性,指向一个对象,注意这个prototype就是一个对象,叫做原型对象。这个对象的所有属性和方法,都会被构造函数所拥有。
    对象都有一个属性__proto__指向构造函数的prototype原型对象。

    接下来简单的说说三者的关系
    1. 构造函数的prototype属性指向了构造函数原型对象
    2. 实例对象是由构造函数创建的,实例对象的__proto__属性指向了构造函数的原型对象
    3. 构造函数的原型对象的constructor属性指向了构造函数,实例对象的原型的constructor属性也指向了构造函数
    接下来看看什么是原型链

    在这里插入图片描述

    最后说说成员查找机制

    当访问一个对象的属性或方法时,首先查找这个对象自身有没有该属性,如果没有就查找他的原型(也就是__proto__指向的prototype原型对象)如果还没有就查找原型对象的原型(Object的原型对象),依此类推,一直找到
    Object为止(null)__proto__意义在于为对象成员查找机制提供一个方向。

    展开全文
  • js 原型链

    2020-09-02 19:36:29
    一、 什么是原型链? 每个对象都可以有一个原型_proto_,这个原型还可以有它自己的原型,以此类推,形成一个原型链。查找特定属性的时候,我们先去这个对象里去找,如果没有的话就去它的原型对象里面去,如果还是...
  • JS 原型链

    2019-11-08 15:03:48
    我们每学习一个概念,不仅要知道它是什么,...所以原型链是用来解决 JS 中的继承问题的。(指 ES6 之前,ES6以后有了 class 和 extends 语法糖) 以下正式开始。 在 Javascript 中,一直都有这么一种说法,万物皆...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,534
精华内容 3,413
关键字:

js原型链