关于__proto__与prototype ---写给懂java的人看(我们都被忽悠了.........)

我之前是搞java的,现在转前端,我都快被JavaScript的__proto__和prototype快整崩溃了,花了几天时间,查了好多资料,最后我哑然失笑,我发现,我被忽悠了..................

我们先来看以下java的类和java的继承关系:

Class Person{       //定义类Person
    String name;
    int age;
    Person(name,age){      //这个是Pserson的构造器
       this.name = name;
        this.age = age;
    }
}

Person person = new Person("xiaowang",22);  //new 一个Person的实例

 这里的person实例是通过类Person的构造器new出来的,同时java里面所有的类都是Object的子类

我们在看JavaScript的prototype和__proto__

先看两个例子

function Dog(){}
var dog = new Dog();

Dog.prototype.constructor == Dog ==>true

这句话的意思是Person的原型的构造器是Person 这个是神马意思??

我的神,那你们说用java的话来说Person的原型 的原型是神马东东?

看出来了吗,看不出来就网上看哪个java的例子,上面我们定义了一个Class Person 定义了一个类

它的名字就叫Person,同时我们还给Person定义了一个构造器,那你们说说,我们定义的那个构造器是谁的构造器

,没错它就是Person的构造器,清楚了吧.

看回来,Dog是不是一个构造器,那它是谁的构造器,Dog.prototype.constructor == Dog 这句话说的很

明白了,Dog是(Dog.prototype)的构造器,那么清楚了把,用java来说,这个 Dog.prototype 这个东西我们应该叫什么

没错,Dog.prototype 这个东西在java就叫做类,它有一个构造器叫做Dog.

另外还有__proto__这个东西,实际上它就是java里的extend继承

明白了这层关系,接下来就好理解了.下面的代码你们去运行以下,就什么都明白了;(把下面的代码贴到Chrome的控制台看看 ,结果都返回true)

function Person(){}; //定义Person类

var person = new Person(); //new 一个Person的实例

var arr = [1,2,3]; //定义一个数组

console.dir(person.__proto__ == Person.prototype); //Person实例person继承 类(Person.prototype)的属性

console.dir(arr.__proto__ == Array.prototype)

console.dir(Person.prototype.__proto__ == Object.prototype); //Person.prototype继承Object.prototype (大白话:Person类继承Object类)

console.dir(Array.prototype.__proto__ == Object.prototype)


console.dir(Object.prototype.__proto__ == null); //(类)Object.prototype 是顶级类,它上边没人了

console.dir(Person.__proto__ == Function.prototype); //(构造器)Person 继承根类构造器Function.protype == function Empty(){};

console.dir(Array.__proto__ == Function.prototype) //(构造器)Array继承根类构造器Function.protype

console.dir(Object.__proto__ == Function.prototype); //实际上所有构造器都继承根类构造器

console.dir(Function.prototype.__proto__ == Object.prototype); //Functon 可以看做是根类构造器,由于function也是对象,所以,最终

Function.prototype.__proto__ == Object.prototype 就返回了true;

由于工作很忙,以上是匆忙写下的,所以可能很多东西都讲得不是太清楚.有什么问题,希望大家留言讨论,同时希望在这里能多交几个志同道合的朋友,

本人qq:12448035,遗憾的是,在公司限制上q只能上网查资料而已.













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值