• 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关键字节约内存。

      

  • 相关阅读:
    700. Search in a Binary Search Tree
    100. Same Tree
    543. Diameter of Binary Tree
    257. Binary Tree Paths
    572. Subtree of Another Tree
    226. Invert Binary Tree
    104. Maximum Depth of Binary Tree
    1、解决sublime打开文档,出现中文乱码问题
    移植seetafaceengine-master、opencv到ARM板
    ubuntu16.04-交叉编译-SeetaFaceEngine-master
  • 原文地址:https://www.cnblogs.com/forstudy/p/3393871.html
Copyright © 2020-2023  润新知