美文网首页
原型及原型链

原型及原型链

作者: 追马的时间种草 | 来源:发表于2019-08-21 22:32 被阅读0次

相信好多人对JS原型以及原型链都有过懵逼的状态,我也一样。但如果稍微弄懂一些或是有点儿思路的时候,会感觉原型链也是非常有意思的。

  • 不多说,先来张图捋一捋一下它们之间的关系

原型链关系图
  • 看完图是否还觉的晕都转向呢?如果还觉得懵圈,没关系,请跟我一起往下走。

  • 请阅读和思考以下几句话
  1. 所有的实例都是对象数据类型的;
  2. 每一个函数数据类型(函数、类)都天生自带一个prototype属性,prototype的属性值是一个对象数据类型的;
  3. prototype 属性中天生自带一个constructor属性,属性值是当前原型所属的类;
  4. 每一个对象数据类型值(对象、数组、arguments...)天生自带一个proto属性,属性值指向当前实例所属类的原型;
  5. 所有的函数数据类型(普通函数、类(内置的、自定义))都是Function的一个实例;Function是所有函数的基类;
  6. 所有的对象数据类型(实例、prototype、对象)都是Object的一个实例;Object是所有对象数据类型的基类;
  • 读完这些是否焕然大悟呢?那么就让我们带着自己的理解做几道关于原型链的面试题吧

  • 题一:
var A = function() {};
A.prototype.n = 1;
var b = new A();
A.prototype = {
   n: 2,
   m: 3
}
var c = new A();
console.log(b.n);//1
console.log(b.m);// undefined
console.log(c.n);//2
console.log(c.m)//3
  • 题二
var F = function() {};
Object.prototype.a = function() {
    console.log('a');
};
Function.prototype.b = function() {
    console.log('b');
}
var f = new F();
f.a();//a
f.b();// f.b is not a function
F.a();//a
F.b();//b
  • 题三
function Person(name) {
 this.name = name
}
let p = new Person('Tom');
//问题1:1. p.__proto__等于什么?
     //Person.prototype
//问题2:Person.__proto__等于什么?
   //Function.prototype
console.log(p)//Person {name: "Tom"}
console.log(p.__proto__)//{constructor: ƒ}
  • 题四
var foo = {},
F = function(){};
Object.prototype.a = 'value a';
Function.prototype.b = 'value b';
console.log(foo.a);//value a
console.log(foo.b);//undefined
console.log(F.a);//value a
console.log(F.b);//value b

总结:

  • A:
    构造函数解决了实例私有属性问题;
    原型模式解决了属性的公有问题;

  • B: 原型模式:

  1. 每一个函数数据类型(函数、类)都天生自带一个prototype属性,prototype的属性值是一个对象数据类型的;
  2. prototype 属性中天生自带一个constructor属性,属性值是当前原型所属的类;
  3. 每一个对象数据类型值(对象、数组、arguments...)天生自带一个proto属性,属性值指向当前实例所属类的原型;

相关文章

  • lesson 5 面向对象及原型链 2021-04-29

    课程标题 面向对象及原型链 课程目标 面向对象思想 原型及原型链 继承 知识点 面向对象思想 原型链的指向 new...

  • js_继承及原型链等(四)

    js_继承及原型链等(三) 1. 继承 依赖于原型链来完成的继承 发生在对象与对象之间 原型链,如下: ==原型链...

  • 原型及原型链

    使用对象---->使用对象中的属性和和对象中的方法,使用对象就要先有构造函数 构造函数 原型链:是一种关系,实例对...

  • 原型及原型链

  • 原型及原型链

    很多初学者在自学前端一些原型、原型链和原型链的查找搞不清楚,很容易学蒙圈,分享一些在爱前端学习时总结的知识希望可以...

  • 原型及原型链

    在JS中有继承的概念,继承的大概意思以一个对象为基础去创建另一个对象,而另一个对象可以借用基础对象的属性,函数等。...

  • 原型及原型链

    相信好多人对JS原型以及原型链都有过懵逼的状态,我也一样。但如果稍微弄懂一些或是有点儿思路的时候,会感觉原型链也是...

  • 原型及原型链

    什么是原型 js中的原型指的是一个对象可以从另一个对象继承特性。每个对象都有一个原型对象,对象以其原型对象为模板,...

  • 原型及原型链

    原型是什么 原型:每个函数都有prototype(原型)属性,这个属性是一个指针,指向一个对象,这个对象的用途是包...

  • 原型及原型链

    普通函数与构造函数 函数还是之前的函数,唯一的区别就是首字母大写 普通函数 正常调用,不需要 new 关键字 执行...

网友评论

      本文标题:原型及原型链

      本文链接:https://www.haomeiwen.com/subject/dbwbsctx.html