JS类、原型对象、构造函数之间的关系


    作为一个WEB的初学者来说,一提到类就头痛的要死(我是这样,不知道我是不是以偏概全了),经过几天的研究,终于有了一些眉目,今天特地把它写出来,给和我有一样困惑的童鞋,大家共同探讨,共同进步,有什么不对的地方,请下方给我留言,废话不多说,进入正题吧。

 

   首先,大家要知道,在JS中,对象有三种创建方式:对象直接量关键字newObject.create()函数(不常用)。

   对象直接量:   var point = {x:1, y:1};

   关键字new:   var point = new Function();

    对象直接量是一个表达式,这个表达式每次运算都创建并初始化一个新的对象。每次计算对象直接量的时候,也都会计算它的每个属性值。不便于创造大量相同的对象,不利于使用继承。而关键字new则可能使用继承的方式。

    

    原型对象:每一个JS对象(null除外)都和另一个对象相关联。“另一个对象”就是我们熟知的原型,每一个对象都从原型继承属性。

                 通过对象直接量创建的对象都具有同一个原型对象,并可以通过Object.prototype获得对原型对象的引用。

                 

                通过关键字new和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。

                

               没有原型的对象为数不多,Object.prototype算一个,它不继承任何属性。其他原型对象都是普通对象,普通对象都具有原型。Object.prototype是祖宗,其他的构造                函数都是它儿子或者孙子、重孙子。它的孙子的原型是他儿子,同样也是它,因为他儿子是继承它的,这样一来,每个对象都继承至少一个原型对象,这一系列链接的原                型对象就是所谓的“原型链”。

     

    :在JS中,类的实现是基于起原型的继承机制的。如果两个实例都从一个原型对象上继承了属性,我们就说它们是一个类的实例。类的所有实例对象都从一个原型对象上继承属         性。因此,原型对象是类的核心。

    构造函数:构造函数是用来初始化新创建的对象的。在JS中构造函数没有准确的定义它是什么,当任意一个普通函数用于创建一类对象时,它就被称为构造函数(构造器)。我           感觉构造函数最主要的一点就是在函数内部,应当对this进行设置和引用。

 

    使用new操作符调用构造函数,开始会创建一个空对象,然后将空对象的_proto_指向了构造函数的prototype,最后会将构造函数的作用域赋给空对象。

    prototype:每一个函数中都会有一个prototype,这个指向他的原型对象;

    _proto_:存在每一个对象中,这个指向他的原型对象(原型链);(自我认为)

 

   构造函数相当于皇上,类就相当于皇太后,垂帘听政。新对象的原型对象不是构造函数本身,而是他的prototype属性。

    第一次发文章,感觉自己写的不好,但这是尽我自己最大的努力,我会积累经验,希望写出更清晰、更容易理解的文章,来服务大家。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM