JS类、构造函数、原型对象prototype\constructor、组合继承、call()

构造函数构造函数存在浪费内存问题,每个实例的复杂数据类型都开辟一块内存空间,既浪费时间又浪费内存成员 function Star(uname, age) { this.uname = uname; this.age = age; this.sing = function() { console.log('我会唱歌'); } } var ldh
摘要由CSDN通过智能技术生成

构造函数

定义:通过 new 函数名 来实例化对象的函数叫构造函数。任何的函数都可以作为构造函数存在。之所以有构造函数与普通函数之分,主要从功能上进行区别的,构造函数的主要 功能为 初始化对象,特点是和new 一起使用。new就是在创建对象,从无到有,构造函数就是在为初始化的对象添加属性和方法。构造函数定义时首字母大写(规范)。

对new理解:new 申请内存, 创建对象,当调用new时,后台会隐式执行new Object()创建对象。所以,通过new创建的字符串、数字是引用类型,而是非值类型。

构造函数存在浪费内存问题,每个实例的复杂数据类型都开辟一块内存空间,既浪费时间又浪费内存

构造函数与ES6 类的区别

通过class定义的类和通过构造函数定义的类二者本质相同。并且在js执行时,会将第一种转会为第二种执行。所以 ES6 class的写法实质就是构造函数。

class Person{
     //定义一个名字为Person的类
    constructor(name,age){
    //constructor是一个构造方法,用来接收参数
      this.name = name;  //this代表实例对象
      this.age = age;
    } 
    say(){
     //这是一个类的方法,注意千万不要加上function
      return   this.name + this.age
    }
  }
  var obj = new Person('老铁',18);
  console.log(obj.say());
构造函数
function Person(name,age){
      //构造函数和实例化构造名相同且大写(非强制,但这么写有助于区分构造函数和普通函数)
      if(!(this instanceof Person)){
    //避免使用者不小心讲Person当作普通函数执行
         throw new Error(''请使用 new Person"); //仿ES6 class 中的写法
      }
      this.name = name;
      this.age = age;
    }
    Person.prototype.say = function(){
   
      return   this.name + this.age
    }
  var obj = new Person('老铁',18);   //通过构造函数创建对象,必须使用new运算符
  console.log(obj.say());

成员

	function Star(uname, age) {
   
            this.uname = uname;
            this.age = age;
            this.sing = function() {
   
                console.log('我会唱歌');
            }
        }
        Star.sex = '男';
        var ldh = new Star('刘德华', 18);
实例成员
// 1.实例成员就是构造函数内部通过this添加的成员 uname age sing 就是实例成员
// 实例成员只能通过实例化的对象来访问
console.log(ldh.uname);
ldh.sing();
// console.log(Star.uname); // 不可以通过构造函数来访问实例成员
静态成员
// 静态成员只能通过构造函数来访问
console.log(Star.sex);
console.log(ldh.sex); // 不能通过对象来访问

原型对象 prototype (共享方法)

为解决构造函数内存浪费问题,一般情况下,我们的公共属性定义到构造函数里面, 公共的方法我们放到原型对象身上

// 1. 构造函数的问题. 
        function Star(uname, age) {
   
            this.uname = uname;
            this.age = age;
            // this.sing = function
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值