zoukankan      html  css  js  c++  java
  • Javascript面向对象编程(一):对象的产生

          Javascript是一种基于对象(Object-Based)的编程语言,常说在javascript中一切都是对象,那么对象究竟是怎么产生的呢?

          (一)原始模式

           首先说一下我们常见的对象——Object实例。创建Object实例方式有很多,第一种是使用new操作符后跟Object构造函数

    var person=new Object();
    person.name="张三";
    person.age=21;
    

      另一种方式是对象字面量表示法

    var person={
    	name:"张三",
    	age:21
    }
    

      这两种方式是生成对象的原始模式。这样写有个很明显的弊端:如果我们需要n多个person对象,那么我们编码是相当罗嗦苦逼的。既然这样,那我们需要一个工厂去批量生产这些person实例。

         (二)工厂模式

    function createPerson(name,age){
    	var o=new Object();
    	o.name=name;
    	o.age=age;
    	return o;
    }
    var person1=createPerson("张三",20); var person2=createPerson("李四",21);

      这样每次调用createPerson函数,传入两个参数我们就可以创建一个person实例。这样虽然可以创建对象,但是仍然不能体现“类”与对象实例的关系。

         (三)构造函数模式

          所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。

    function Person(name,age){
    	this.name=name;
    	this.age=age;
    }
    var person1=new Person("张三",21);
    var person2=new Person("李四",20);
    

      这样我们就可以通过new Person构造函数创建一个实例对象,慢慢地和我们所认知的“类”与对象实例的关系接近了,我们再进一步拓展一下这个构造函数(毕竟实际当中人的属性总不单name和age吧)。

    function Person(name,age){
    	this.name=name;
    	this.age=age;
    	this.type="高级动物";
    	this.speak=function(){
    		alert(this.name);
    	}
    }
    var person1=new Person("张三",21);
    var person2=new Person("李四",20);
    

      我们为对象添加了type属性和speek方法。可我们发现,每一个实例对象,type属性和speak()方法都是一模一样的内容,每生成一个实例,都必须为重复的内容,多占用一些内存,这样势必会造成大量的内存浪费,那有没有比较方法把一模一样的内容单独拿出来共享呢,让所有的实例对象都能访问?

         (四)原型模式(Prototype模式)

         Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。那我们可以把那些一模一样的内容(不变的属性和方法),直接定义在prototype对象上。

    function Person(name,age){
    	this.name=name;
    	this.age=age;
    }
    Person.prototype.type="高级动物";
    Person.prototype.speak=function(){
    	alert(this.name);
    }
    var person1=new Person("张三",21);
    var person2=new Person("李四",20);
    console.log(person1.type);
    console.log(person2.type);
    person1.speak();
    person2.speak();
    

      这种方式其实就是常说的构造函数模式+原型模式,就是将不同的部分放在构造函数中去构造,把相同的部分放在原型中去共享继承。

         总结:结合上面四种对象产生方式,我们可以根据实际开发需要去创造我们需要的对象,其实,四种模式并没主次优劣之分,只要能最大限度节省内存和代码复用高效才是最好的方式。

         

  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/iRavior/p/2804171.html
Copyright © 2011-2022 走看看