js高级的原型与原型链个人理解

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>js高级的原型与原型链个人理解</title>
</head>
<body>
<script type="text/javascript">
    /*我视频是跳过看的,我觉得和java类很像,下面都是个人理解*/
  /*对于js的原型prototype的object来说在我看来他与java的class类模板就是一个东西
  * */
  /*比如呢:*/
  function Fn(){
    /*他函数的起名大写就相当与是给他创建了一个无参构造函数
    * 这个函数的原型object 就是 Fn这个class模版
    * Fn()就是他的无参构造你也可以有参构造
    * */
  }
  var f=new Fn();/*这种就是用Fn()构造函数的class模板复制一份 在一个新的地址 然后再把这个变量指向这个地址
  这样就形成了一个链子
  后端人理解非常简单
  */
  /*你甚至可以认为Fn()这个构造函数外面包裹着一层虚构的class类他的类名就是Fn*/
  /*只要你理解了这一点就没什么好说的了他们的祖宗总归是Object类*/
  /*prototype与__proto__*/
  /*
  prototype是显式原型
  __proto__是隐式原型
   */
  console.log(Fn.prototype);
  console.log(Fn.__proto__);/**/
  console.log(f.prototype);/*显式原型是无法显示,实例化变量,的原型,的*/
  console.log(f.__proto__);
  console.log(Fn.prototype===f.__proto__);/*因为f的原型是模板 模板是由构造函数来构成的不然他们就是一个空Oject类 Fn本身是一个构造函数他是
  构建了一个类是在背后直接构建的  f是使用了别人构建好的模板再创建了一个空间 所以他是隐式的 但他们的原型可不都是模板 与构造函数
    所以必定相等
    总之你可以是构造函数用prototype 来找他的原型  实例化对象用__proto__ 通过构造函数来找他的原型
  */
  /*理解了上面的描述,视频中这个面试题就很好理解*/
  /*题目1*/
  function A(){
  }
  A.prototype.n=1;
  var b=new A();/*他在这里a的原型中只有n=1,他把模板类 也就是A的原型复制了一份 为b创建了一个实例化对象*/
  A.prototype={
      n:2,   /*这里把a的原型中所用的属性替换成了这个对象 里面有n=2,m3 ,但是我们b已经是复制之前的模板创建好了 的 跟这nm没有关系*/
      m:3   /*m在b中根本没有就是undifined*/
  }
  var c=new A(); /*这时候c才把a的当前原型(模板)拿过来给自己复制一份开辟了一个新地址来实例化所以c中n=2,m=3*/
  console.log(b.n,b.m,c.n,c.m);/*结果必定是1,undifined,2,3*/
/*题目2*/
  function F(){}
  Object.prototype.a=function(){console.log("a()");}
  Function.prototype.b=function(){console.log("b()");}
    var nm=new F();
  nm.a();/*这个能够显示是因为Object是所有类的祖宗类他们都相当于继承了object类中的属性a,函数以及模板他都是对象类(object类)*/
  //nm.b();
  F.a();/*这个同理*/
  F.b();/*这个可以显示也许是因为Function.prototype是本地函数 本地函数只在类模板中可以使用 *只是我认为的***/
  console.log( Function.prototype)
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值