对象
对象的创建方法
var obj={}
- 构造函数–首字母大写(大驼峰)
1)系统自带函数Object()–首字母大写(大驼峰)
var student = new Object();
student.name = "LiuDehua";
student.age = "20";
这样一来,student对象就创建好了。
new student 产生一个新的对象(外形相同实为两人)。
2)function Car(color){ this.color=color; this.name='BMW'; this.height='1400'; this.length='4900'; this.weight=1000; } var car=new Car("red"); var car1=new Car();
这是另一种较为简单的创建方式。
构造函数的内部原理(new)
(1)在函数体最前面隐式加上this={}
(2)执行this.xxx=xxx;
(3)隐式的返回this
原型prototype
1.function对象的一个属性,他定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
2.利用原型特点和概念,可以提取共有属性。
Person.prototype.LastName="abc";
Person.prototype.name="BMW";
function Person(name,age,sex){
this.name=name;
this.age=age;
this.sex=sex;
}
var person=new Person();
此时person.LastName=abc。
可见,person身上并没有LastName属性,而从其原型prototype上找,并拿来引用。所以我们可以推断出:原型在函数定义的时候就已存在。
我们可以通过修改原型的属性来简化我们的代码及工作量。
Car.prototype={
carName:"BMW",
lang:4900,
height:1400
}
function Car(color,owner){
this.owner=owner;
this.color=color;
}
var car=new Car('red','wang');
var car1=new Car('green','li');
将共有属性放入原型中,新的对象中,自身找不到属性,则会从原型中取,符合工厂模式。
proto(是一个隐藏的属性,用来存放原型)
上方讲到创建对象new Object会在函数体最前面隐形的加上this{}。这看似是一个空对象,其实里面放的就是__proto__:Person.prototype
。
来看一组代码:
Person.prototype.name='abc';
function Person(){
}
var obj={
name:"sunny"
}
var person=new Person();
//此时person.name=abc,
person.__proto__=obj;
//此时person.name="sunny" 被改
}
再看一组:
Person.prototype.name="sunny";
function Person(){
}
var person=new Person();
Person.prototype.name="Mike"
console.log(person.name);//Mike prototype被更改
Person.prototype={
name:"cherry"
}
console.log(person.name);//cherry
原型链
简单理解就是原型组成的链,对象的__proto__它的是原型,而原型也是一个对象,也有__proto__属性,原型的__proto__又是原型的原型,就这样可以一直通过__proto__想上找,这就是原型链。
绝大多数对象的最终都会继承自Object.prototype。
反例Object.create 。Object.create(原型) 原型只能放object或null。
var obj={name:"sunny",age:123};
var obj1=Object.create(obj)
console.log(obj1.name)----"sunny"
——在努力,再努力