理解js中的实例方法,原型方法、静态方法和内部方法

本文深入讲解JavaScript中的实例方法、原型方法、静态方法和内部方法。通过构造函数创建实例,理解不同方法的调用方式和作用域,掌握方法的正确使用。

理解js中的实例方法,原型方法、静态方法和内部方法

刚学构造函数和他的实例以及一系列方法真的搞了好久才明白。

首先要明白实质上属性和方法是一样的,方法是属性为引用型的函数。
内部方法
定义在函数内部的方法,内部方法只能被内部的方法调用

function Person(){
      var work=function(){
          console.log('内部方法')
      }
  }
  console.log(work)//work is not defined

静态方法
静态方法:是直接在构造函数上定义的方法,不能被实例调用,自身可以调用

function Person() {
  }
  Person.sing=function(){
      console.log('singing')
  }
  var p=new Person()
  p.main='sss'//给实例添加属性
  console.log(p.main)//sss
  
  Person.sing()//singing
  p.sing()//报错:baUncaught TypeError: p.sing is not a function

原型方法
通过prototype属性在构造函数上添加的方法

function Person() {    
  }
  Person.sing=function(){
      console.log('singing')
  }

  Person.prototype.eat=function(){
      console.log('eating')
  }
  var p=new Person()

  Person.prototype.eat()//eating
  p.eat()//eating

实例方法
因为在构造函数中this指向的是他的实例对象,所以定义在this中的变量和方法,只有实例才能访问到,无法通过构造函数直接调用。

function Person(name,age) {
    this.name=name
    this.age=age//name,age为实例变量
    this.dance=function(){//实例方法
        console.log('dancing')
    }
    console.log(this)//Person {name: "lily", age: 20, dance: ƒ}
  }
  
  var p=new Person('lily',20)
  console.log(p.name,p.age)//lily 20
  p.dance()//dancing
  Person.dance()//Uncaught TypeError: Person.dance is not a function

综合来看一下这些方法的使用吧

function Person(name,age) {
    this.name=name
    this.age=age//name,age为实例变量
    this.dance=function(){//实例方法
    	console.log('dancing')
    }
    var fn=function(a,b){//内部方法
         return a+b
      }
    var obj={//函数内部对象
        name:'lucy',
        age:18,
        fn2:function(){
           return fn(1,2)
        }
    }
    console.log(obj.fn2())//3
  }
  Person.sing=function(){//静态方法
      console.log('singing')//singing
  }

  Person.prototype.eat=function(){//原型方法
      console.log('eating')
  }
  var p=new Person('lily',20)//构造实例
  console.log(p.name,p.age)//lily 20

  Person.prototype.eat()//eating
  p.eat()//eating

  
  p.main='sss'//实例属性
  console.log(p.main) //sss

  p.sing=function(){//实例方法
      console.log('sing')
  }
  p.sing()//sing
  
  Person.sing()//singing
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值