1 创建对象的方式
1.1工厂模式:工厂模式可以创建多个对象,但是会有对象表示问题。对象的instanceof都指向Object
1.2 构造函数:用于特定类型的对象使用new创建对象
function Person(name,age){
this.name = name
this.age = age
}
let p1 = new Person("view",12)
let p2 = new Person("view2",123)
创建历程
1)在内存中创建一个新对象
2)实例对象内部prototype特性赋值为构造函数的prototype属性
3)构造韩式的this赋值给新对象
4)执行函数内部代码
5)返回一个非空的对象
构造函数创建对象相对于工厂函数创建的好处就是明确了实例对象的特定类型
构造函数创建对象问题:内部重复信息太多
1.3原型创建对象
每个函数都会创建一个prototype属性,这个属性是一个对象,包含特定引用类型的实例共享属性和方法。实际上这个对象是通过调用构造函数创建的对象原型。使用原型创建对象的好处就是。在它上面定义的属性和方法可以被实例共享
function Person() {
Person.prototype.name = "age"
Person.prototype.age = 10
Person.prototype.say = function(){
console.log(this.name)
}
}
let p1 = new Person()
let p2 = new Person()
p1.say == p2.say //true

原型顶层
当一个实例对象和原型对象同名属性,返回的值是实例的属性。如果实例属性没有这个属性,那么对象会通过原型链上面找这个属性或者方法是否存在,如果存在就使用,如果还不存在,继续向上寻找
网友评论