高级JS原型与原型链三

// 显示原型、隐式原型
    function Fun() {
      
    }
    Fun.prototype.name = 'zhangsan'
    Fun.prototype.age = 18;
    Fun.prototype.test = function() {
      console.log('test12345');
    }
    console.log(Fun.prototype);
    console.log(Fun.prototype.constructor === Fun);
    var fun = new Fun();
    console.log(Fun.prototype);
    console.log(fun.__proto__);
    console.log(Fun.prototype === fun.__proto__);
    fun.__proto__.test()
    fun.test()
    Fun.prototype.test()
    // Fun.test()
    // 原型链
    console.log(Object);
    console.log(Object.prototype);
    console.log(Object.__proto__);
    function Fn() {
      this.test1 = function() {
        console.log('test1');
      }
      console.log(this);
    }
    Fn.prototype.test2 = function() {
      console.log('test2');
    }
    Fn()
    // Fn.test1();
    console.log(Fn);
    console.log(Fn.prototype);
    var fn = new Fn()
    console.log(fn);
    // fn();
    fn.test1()
    fn.test2()
    // Fn.test2()
    console.log(fn.toString())
    // fn.test3()
    console.log(Fn.prototype);
    console.log(Fn.prototype.__proto__);
    console.log(Fn.prototype.__proto__.__proto__);
    console.log(fn.__proto__);
    console.log(fn.__proto__.__proto__);
    console.log(fn.__proto__.__proto__.__proto__);
    console.log(fn.__proto__ === Fn.prototype);
    console.log(fn.__proto__.__proto__ === Fn.prototype.__proto__);
    console.log(fn.__proto__.__proto__.__proto__ === Fn.prototype.__proto__.__proto__);
  • 每个函数都有一个Prototype属性,默认指向object空对象(没有自己定义的对象),称为原型对象;
  • 原型对象中有一个属性constructor,指向函数对象;
  • 给原型对象中添加属性(方法),这样改函数的实例对象就可以访问里面的属性;
  • 显示原型(属性):每一个函数的原型Protype称为显示原型;在定义函数的时候自动添加,默认值空object对象;
  • 隐式原型(属性):函数的实例对象__ proto __就称为隐式原型;在创建对象时自动添加;默认值构造函数的prototype属性值,显示与隐式的属性是全等的;找属性的时候,自身实例没有找到就会去找它的隐式原型对象上找;
  • 原型链:根据__ proto __ 这条隐式原型链找,自身有找自身,没有沿着隐式网上一层找,找到返回,没有返回undefined;不根据prototype找;是用来查找对象的属性(方法);所有函数的 __ proto __都是一样的;
  • 所有函数的隐式原型 __ proto __ 都指向大写Function(函数)的显示原型;window有一个方法Function 是由Function = new Function() {}产生的,因此,它既是构造函数,也是实例对象,所以他的 __ proto __ 和prototype的指向是一样的;
  • 函数(构造函数):Fn ->函数prototype ->object空对象__ proto __ ->object原型对象__ proto __->null;
  • 函数实例对象:fn ->实例对象__ proto __ ->object空对象__ proto __ ->object原型对象__ proto __->null;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值