JS高级的常用知识点(二)

一、方法过载

        在构造函数中直接定义方法,在实例化的时候,每一个对象都会有一个独立的方法,不同对象的同一个方法放在了不同的内存地址上,浪费了内存资源。

function MyPlane(src) {
  this.src = src
  this.move = function(){
    console.log('移动')
  }

  this.init = function() {
    console.log('初始化,插入节点')
  }
}


//实例化两个对象,两个对象拥有同一个move方法,但是每个对象的move方法都存在不同的内存地址中
let myPlane = new MyPlane('飞机皮肤 - 1288')
let otherPlane = new MyPlane('飞机皮肤 - 288')
console.log(myPlane.move === otherPlane.move)  //返回false

二、原型

        1.概念

        在JS中,每一个 函数 都有一个 prototype 属性,该属性是一个指针,指向函数的原型对象,这个原型对象上的属性和方法都可以被实例共享。 

        格式: 构造函数.prototype.属性 = 属性值

        那原型有什么作用呢?它可以解决上面我们存在的方法过载的问题,我们用prototype修改上面的代码如下:

function MyPlane(src) {
  this.src = src
  this.init = function() {
    console.log('初始化,插入节点')
  }
}
//将move方法写到构造函数的原型属性上去,这样所有的实例对象都会共享该move方法,不会另外开辟内存空间
MyPlane.prototype.move = function(){
  console.log('移动')
}


//实例化两个对象
let myPlane = new MyPlane('飞机皮肤 - 1288')
let otherPlane = new MyPlane('飞机皮肤 - 288')

console.log(myPlane.move === otherPlane.move)  //返回true

        难点:一个对象不但可以共享自己创建的属性,还可以享有原型对象的属性

        2.原型链

        访问一个对象属性的时候,如果在内部找不到该属性,那么就会在原型对象中查找该属性,如果原型对象上也找不到,那么就会在原型对象的原型上查找,如此循环下去,直到到达顶层对象也没有找到该属性,那么就会返回undefined。这个就是原型链

        >>原型链中有一个 constructor 属性,是构造函数,等于创建的构造函数本身

console.log(MyPlane.prototype.constructor === MyPlane)
//返回true

        >>原型链中有一个 __proto__ 属性,每一个对象都有一个该属性,该属性会指向构造函数的原型对象。

console.log(myPlane.__proto__ === MyPlane.prototype)

//输出 true

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值