zoukankan      html  css  js  c++  java
  • 对象的构建

    对象的构建(慕课网)

    面向对象(OOP)的语言都有一个特点,它们都会有类的这一概念,通过类可以抽象出创建具体相同方法与属性的对象。但是ECMAScript中是没有类的概念的,因此它的对象与基于类的语言如java的定义是有所不同的。

    在JavaScript世界中函数作为“一等公民”,它不仅拥有一切传统函数的使用方式(声明和调用),而且可以做到像简单值一样赋值、传参、返回,这样的函数也称之为第一级函数。不仅如此,而且还可以通过操作符new来充当类的构造器。

    函数在充当类的构造器时,原型prototype是一个重要的概念。prototype是构造函数的一个属性, 该属性指向一个对象。而这个对象将作为该构造函数所创建的所有实例的基引用(base reference), 可以把对象的基引用想像成一个自动创建的隐藏属性。 当访问对象的一个属性时, 首先查找对象本身, 找到则返回;若不, 则查找基引用指向的对象的属性(如果还找不到实际上还会沿着原型链向上查找,  直至到根)。 只要没有被覆盖的话, 对象原型的属性就能在所有的实例中找到。

    类一:

    function ajQuery() {
        this.name = 'jQuery';
        this.sayName = function(){
        return this.name
    }
    var a = new ajQuery()
    var b = new ajQuery()
    var c = new ajQuery()

    类二:

    function ajQuery() {
        this.name = 'jQuery'
    }
    ajQuery.prototype = {
        sayName: function() {
        return this.name
        }
    }
    var a = new ajQuery()
    var b = new ajQuery()
    var c = new ajQuery()

    类一与类二产生的结构几乎是一样的,而本质区别就是:类二new产生的a、b、c三个实例对象共享了原型的sayName方法,这样的好处节省了内存空间,类一则是要为每一个实例复制sayName方法,每个方法属性都占用一定的内存的空间,所以如果把所有属性方法都声明在构造函数中,就会无形的增大很多开销,这些实例化的对象的属性一模一样,都是对this的引用来处理。除此之外类一的所有方法都是拷贝到当前实例对象上。类二则是要通过scope连接到原型链上查找,这样就无形之中要多一层作用域链的查找了。

    jQuery对象的构建如果在性能上考虑,所以就必须采用原型式的结构:

    jQuery = function( selector, context ) {
        return new jQuery.fn.init( selector, context );
    }
    jQuery.fn = jQuery.prototype = {
        init:function(){
        return this
    },
        jquery: version,
        constructor: jQuery,
        ………………
    }
    var a = $() ;

    使用原型结构,性能上是得到了优化,但是ajQuery类这个结构与目标jQuery的结构的还是有很大不一致:

       ☑   没有采用new操作符;

       ☑   return返回的是一个通过new出来的的对象 。

    慌慌张张 匆匆忙忙 为何生活总是这样 难道说我的理想 就是这样度过一生的时光 不卑不亢 不慌不忙 也许生活应该这样 难道说六十岁以后 再去寻找我想要的自由 其实我也常对自己说 人要学会知足而常乐 可万事都一笑而过 还有什么意思呢
  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/siwy/p/4867637.html
Copyright © 2011-2022 走看看