欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JavaScript构造函数和原型概述

程序员文章站 2022-03-18 16:55:38
对象创建的三种方式: 利用new Object()创建对象; var obj = new Obejct(); 利用对象字面量创建对象; var obj= {}; 利用构造函数创建对象; function Star(name ,age){ this.name = name; this.age = ag ......

对象创建的三种方式:

 

  1. 利用new object()创建对象;
    var obj = new obejct();
  2. 利用对象字面量创建对象;
    var obj= {};
  3. 利用构造函数创建对象;
    function star(name ,age){
       this.name = name;
      this.age = age;
      this.sing=function(){
      console.log("唱歌");
    }    
    }
    var gg = new star('张国荣',18);
    gg.sing();

    new 做了哪些事情?

           在内存中创建了一个空对象;让this指向这个新对象;执行构造函数里面的代码,给这个新的对象添加属性和方法;返回这个新对象(所以构造函数中不需要return);

   实例成员和静态成员

    实例成员:通过this添加的成员,只能通过实例化的对象访问;如上述代码中的star对象中的name,age,sing成员;

    静态成员:在构造函数上直接添加的属性,只能通过构造函数访问;如star.sex=“男”;通过gg这个实例化的对象是访问不了的;

   构造函数的问题

    1、浪费内存;(每个实例化的对象中的函数都会开辟一个新的内存空间;)解决方法:protptype(原型对象)

   构造函数原型对象:prototype

    构造函数通过原型分配的函数是所有对象共享的;javascript规定每个构造函数中都会有一个prototype属性,指向另一个对象,这个prototype就是一个对象,这个对象的所有属性和方法,都会被构造              函数所拥有;(我们可以把不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法);

    一般情况下,公共的属性定义在构造函数中,但公共的方法定义在构造函数的原型中;

star.prototype.sing=function(){
        console.log("我会唱歌");
    }
var gg = new star('张国荣',18);
var ldh =new star('刘德华',18);
gg.sing();
ldh.sing();

   对象原型:__proto__

    对象都会有一个属性__proto__指向构造函数的protype原型对象,之所以我们在对象中可以使用构造函数prototype原型对象的属性和方法,就是因为有__proto__原型的存在;

            如果我们自改了原来的原型对象,给对象赋值给一个对象必须手动添加constrictor属性指回原来的构造函数;

   构造函数、实例、原型对象三者的关系:

      JavaScript构造函数和原型概述