js构造函数和原型

199 篇文章 0 订阅

创建对象的方式

1,对象字面量
var obj1 = {}
2,new Object()
var obj2 = new Object()
3,利用构造函数创建对象

构造函数
利用构造函数 可以创建很多个对象
构造函数,把对象中公共属性和方法抽出来,放在构造函数里,通过new创建不同的对象

function Star (name ,age){
    this.name = name;
    this.age = age;
    this.song = function(){
        console.log('我会唱歌')
    }//欢迎加入Java开发交流君样:909038429
}

构造函数+原型

通过原型分配的函数,所有对象都可以共享

function Star (name ,age){
    this.name = name;
    this.age = age;
    // this.song = function(){
    //     console.log('我会唱歌')
    // }
}
// 通过原型分配的函数,所有对象都可以共享
Star.prototype.song = function(){
    console.log('我会唱歌')
}
Star.prototype.movie = function(){
    console.log('我会演电影')
}

var ldh = new Star('刘德华', 18)
var zbz = new Star('张柏芝', 19)
console.log(ldh)
ldh.song()
zbz.song()

new的执行过程:
1,new一个构造函数的时候,就创建一个空的对象
2,把构造函数的 this 指向空的对象
3,把构造函数属性和方法 进行赋值操作,赋给空对象
4,返回创建一个新对象

总结:
构造函数 封装的方法在 创建新对象的时候会浪费内存,创建一个对象就开辟一块新内存
原型:
每一个构造函数都有一个prototype属性,指向另一个对象,这个对象就是原型对象; 这个对象的所有属性和方法,都会被构造函数所拥有。
我们可以把那些不变的方法,定义在prototype对象上,这样所有新的实例对象就可以共享这些方法
原型的作用:共享方法,节约内存

为什么对象可以调用原型上的方法:
每一个对象身上都有一个 __proto__属性 它指向我们的构造函数的原型对象prototype,所以对象就可以使用构造函数prototype原型对象
的属性和方法。
__proto__对象和原型对象prototype是等价的

console.log(ldh.__proto__ === Star.prototype)

// constructor我们称为构造函数,因为它指回构造函数本身
// constructor的作用:告诉我们对象 是引用那个构造函数创造出来的
console.log(Star.prototype)
console.log(ldh.__proto__)

原型链
1,只要是对象就有__proto__原型,它指向原型对象
2,我们Star原型对象里面的__proto__原型指向的是 Object.prototype
console.log(Star.prototype.proto === Object.prototype)
// 3,我们Object.prototype原型对象里面的__proto__原型 指向为null
console.log(Object.prototype.proto)

只要是对象 它就有__proto__原型,这个原型指向 原型对象prototype,而原型对象也是对象,它也有自己的原型
原型对象的原型 prototype.proto__指向Object原型对象, Object原型对象也有原型__proto 这就是原型链

原型链就像一条线路,指引我们查找对象的成员
1,首先在对象本身上去找,-> 2,对象上没有通过原型__proto__,就去原型对象上去找,-> 3,原型对象没有,就去Object上去找,-> 4,Object上没有,那就返回null
image
最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:909038429
/./*欢迎加入java交流Q君样:909038429一起吹水聊天

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值