22 函数3之构造函数

1什么是构造函数,构造函数就是函数,仅是函数的另一种调用形式

构造函数的作用 创建对象 构造函数实例化对象

 function Person() {
      console.log('hello');
    }
    // 普通调用
    Person();
    // 使用new调用
    let ret =new Person();
    console.log(ret);

使用new调用就是构造函数的实例化,实例化的结果就是产生实例化对象。

2构造函数定义实例成员

方法1:先实例化对象,再对实例化出来的对象单独添加成员。

function Person(){

}
   let p1=new Person()
   p1.age=20
   p1.gender='男'
   console.log(p1);

 方法2:在构造函数里,为实例化出来的对象添加成员

function Person(){
  // 语法
  // this.XXX=xxx
  this.age=20,
  this.gender='男',
  this.say=function(){
  console.log(111)
  }
}

let p1 = new Person()
let p2= new Person()

console.log(p1,p2);
p1.say()

 3带参数的构造函数实例化对象

function Goods(name,price,count){
   this.name=name;
   this.price=price;
   this.count=count;
 }

 let p1=new Goods('彩电',888,5)
 console.log(p1); //打印出来的是实例化的对象
 let p2=new Goods('冰箱',999,8)
 console.log(p2);

 4new的执行过程

    当使用new调用一个函数时,js内部执行了以下几步

function Person(){}

   1创建一个空对象

let obj={}

2将空对象赋值给this

3执行this.xxx=xxx 向对象上添加成员

4当函数执行结束时,会将这个对象隐式的return出来

this=Obj

this.xxx=xxx

return this

5实例成员和静态成员

根据成员保存的位置进行区分

// 静态成员:构造函数上的属性或方法,只能由构造函数本身访问。

// 实例成员:实例对象上的属性或方法,只能由实例化的对象来访问

function Person(){
  // 构造函数内的this.xxx虽然写在构造函数内,但最终添加到实例对象上
  this.age=20;
  this.say=function(){
    console.log('hello');
  }
}

let p1=new Person();  //实例化对象
console.log(p1);  //打印对象
// 实例成员:
// 实例对象上的属性或方法就是实例成员
console.log(p1.age);     //实例化对象属性  20
p1.say();               //hello

// 静态成员
// 构造函数上的属性或方法,就是静态成员
Person.eyes =2//此时就不要把person当成函数来看,当成对象来看
Person.fn = function(){
  console.log('hello');
}
Person.fn()   //hello
console.log(Person.eyes)  //2

案例:利用构造函数封装模态窗口

<body>
  <button id="delete">删除</button>
  <button id="login">登录</button>

  <!-- <div class="modal">
    <div class="header">温馨提示 <i>x</i></div>
    <div class="body">您没有删除权限操作</div>
  </div> -->

 <script>
// 面向对象分析:
// 弹窗就是一个对象,先定义一个构造函数
// 弹窗对象要有显示的能力
// 弹窗对象要有隐藏的能力
// 弹窗还有标题,内容信息(属性)
// 用于展示效果的Dom元素


// 实现步骤:
// 1封装一个构造函数
// 2封装显示的方法
// 3封装关闭的方法
// 4模态

// 构建函数
function Modal(title,content){
  // 方法中的this就代表实例化的对象
  this.title=title;
  this.content=content;
  // 创建一个用于页面展示效果的标签
  this.el=document.createElement('div')
  // 为了让样式生效,为创建的元素定义className
  this.el.className='modal'
  // 通过innerHTML方法创建内容
  this.el.innerHTML=`<div class='header'>${this.title}<i>x</i></div>
  <div class='body'>${this.content}</div>`

  // 封装一个显示的方法
this.show = function(){
  // 将this.el元素追加到body里即可实现显示
  document.body.appendChild(this.el)
  // 获取关闭按钮,为其绑定事件,也就是隐藏
  // document.querySelector('.header i')
  // 
  this.el.querySelector('.header i').addEventListener('click',
  // function(){-
  //   document.body.removeChild(this.parentNode.parentNode)
    ()=>{document.body.removeChild(this.el)
      console.log(this); //Modal 对象
      console.log(this.el);  //元素

  })
}
}

// 为按钮注册点击事件  只要点击就会生成对象,也就是窗口,只不过窗口的字由参数决定,样式已经全部决定了,只改字
document.querySelector('#delete').addEventListener('click',function(){
 let m= new Modal('温馨提示','您无权删除');
 m.show();
})

document.querySelector('#login').addEventListener('click',function(){
 let m= new Modal('登录成功','正为您跳转');
 m.show();
})

 </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值