创建对象的方法有:
1、字面量 {}
2、构造函数
3、系统自带的构造函数 new Object()
4、Object.create(原型) //可以无原型
new操作符
在函数体最前面隐式加上 var this = {proto:xxx.prototype}
然后执行this.xxx = xxx;
最后返回return this;
原型:原型是function对象的一个属性,它定义了构造函数构造出来的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
Car.prototype -----> {} 原型 是实例对象的公有祖先
function Car() {}
var car= new Car()
实例访问一个属性,如果自身没有,则去看原型上有没有
现在看看prototype对象里都默认有哪些属性
系统自带的属性constructor:通过这个属性可以得到实例的构造器
例如:car.constructor ----> Car
另外也可以手动改变这个属性值
__proto__属性里放的是原型,每一个对象都有__proto__属性
例如:
Person.prototype.name = 'abc'
function Person() {}
var person= new Person()
__proto__就是一个桥梁,当一个对象访问一个属性自身不存在时,就会沿着__proto__找到原型上去
__proto__可以被修改,例如person.proto = obj,那么person的原型就是obj了
用__proto__可以查看原型,但是一般用Object.getPrototypeof()查看原型
修改原型上的属性:只能是Person.prototype.name = ‘yhhjj’,不可以person.name = ‘yhhjj’,这样相当于给person增加一个name属性
删除原型上的属性:delete person.name
原型链。。。
原型的用处一
将构造函数里的不变属性放入原型里,也就是说提取共有属性,这样可以提高效率
Car.prototype = {
height: 1200,
lang: 'BSD'
}
function Car(color,owner) {
this.owner = owner;
this.color = color;
}
var car = new Car('red', 'xiaoming')
var car2 = new Car('black', 'xiaohong')