对象的三种创建方式
字面量
var obj = {}
new 关键字
var obj=new Object()
构造函数
function Person(){
this.name="zs"
this.age =12
}
var p = new Person()
构造函数的原型
构造函数通过原型分配的函数是所有对象共享的
JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象,这个prototype属性就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有
我们可以把哪些不变的方法,直接定义在prototype对象上,这样所有的对象实例就可以共享这些方法
每一个实例对象都可以访问它构造函数的原型对象中的成员
/*
实例成员 就是构造函数内部 通过this添加的成员uname age sing
*/
function Star(uname, age) {
this.uname = uname
this.age = age
// this.sing = function () {
// console.log('我会唱歌')
// }
}
// console.log(Star.prototype)
// 动态的方式给原型对象添加成员
Star.prototype.sing = function () {
console.log('我会唱歌')
}
// 实例化对象 new创建的对象就是一个实例对象
var ldh = new Star('刘德华', 18) // 实例成员只能通过实例化的对象来访问
console.log(ldh.uname)
console.log(ldh.age)
ldh.sing()
var zxy = new Star('张学友', 28)
zxy.sing()
// 一般情况下 我们把公共的属性定义到构造函数里面 公共的方法放到原型对象上
对象原型
实例对象都会有一个属性__proto__ 指向构造函数的prototype原型对象 之所以我们对象可以使用构造函数prototype 原型对象的属性和方法,就是因为对象有__proto__属性的存在
proto 对象原型 和原型对象prototype 是等价的 proto 对象原型的意义 在于为对象的查找机制提供了一个方向,或者说是一条路线,__proto__是一个非标准属性
在开发过程中,不可以使用这个属性__proto__,它只是内部指向原型对象prototype