zoukankan      html  css  js  c++  java
  • JavaScript -- 面向对象

    概述

      JavaScript本身并非面向对象(不支持“class”关键字),只能通过其本身的一些特性来模拟面向对象编程。

      主要分为两大类:

        1,原始对象方式;

        2,构造函数方式(推荐)。

    原始对象方式

      直接使用json:

    		var Dog = {
    			name : '';
    			color : ''
    		};
    
    		var dog1 = {};
    		dog1.name = "dog1";
    		dog1.color = "yellow";
    
    		var dog2 = {};
    		dog2.name = "dog2";
    		dog2.color = "blue";
    

      这类方式有2个缺点:1,原型与实例对象之间关系不明显(dog1与dog2很难看出是Dog的实例);2,语法非常啰嗦。

      为了解决语法啰嗦的问题,可以使用以下方式:

    		function Dog(name, color) {
    			return {
    				name : name,
    				color : color
    			}
    		}
    
    		var dog1 = Dog("dog1", 'yellow');
    		var dog2 = Dog("dog2", "blue");
    

      此类方式仍旧存在缺点1。

    构造函数方式

      原型对象方式存在以上的问题,JavaScript提供构造器方式。

      构造器:形式上仍是一个function,但其内部含有this关键字,可以使用new 关键字调用构造器生成实例。

      使用构造器修改之前的代码:

    		function Dog(name, color) {
    			this.name = name;
    			this.color = color;
    		}
    		Dog.prototype.eat = function (){
    			alert("eat something");
    		};
    		Dog.prototype.type = "dog";
    
    		var dog1 = new Dog("dog1", "yellow");
    		var dog2 = new Dog("dog2", "blue");
    

     

      这里要说明的是prototype关键字,以上代码中

    		Dog.prototype.eat = function (){
    			alert("eat something");
    		};
    		Dog.prototype.type = "dog";
    

      

      可以使用this关键字代替:

        this.type = "dog";
    
        this.eat = function(){alert(“eat something");};
    

      

        但是this关键字方式存在一个问题:每个实例都会重新生成type及eat,但我们看到,对于type及eat每个实例的内容都是一样的,所以这样就造成了内存的浪费。

      有没有方式可以解决这个问题呢?有,那就是使用prototype关键字。

        prototype关键字:每个构造器都可以使用prototype,它指向另一个对象,此对象的属性和方法会被该构造器的实例继承。

      总结:
         1,原型对象方式可能存在”原型与实例对象之间关系不明显“、”语法啰嗦“的问题;

       2,构造器方式是推荐的方式,使用this关键字声明属性和方法,new关键字生成实例化对象;

       3,若构造器方式中含有一致的方法或属性,可以使用prototype关键字节约内存。

      

  • 相关阅读:
    xe5 android tts(Text To Speech) [转]
    xe5 android sample 中的 SimpleList 是怎样绑定的 [转]
    xe5 android 控制蓝牙[转]
    xe5 android 调用照相机获取拍的照片[转]
    XE5 Android 开发数据访问手机端[转]
    XE5 Android 开发实现手机打电话和发短信 [转]
    让VCL的皮肤用在手机程序里 让安桌程序不山寨[转]
    XE5 Android 开发数据访问server端[转]
    XE5 Android 开发实现手机打电话和发短信[转]
    Delphi XE5的Android开发平台搭建[转]
  • 原文地址:https://www.cnblogs.com/forstudy/p/3393871.html
Copyright © 2011-2022 走看看