- 对象
//直接定义
var p1= {
name: 'zs',
age: 20,
say: function(){
console.log("呵呵");
}
}
- 类(es5写法)
实际上,es5中的类是利用构造函数constructor&原型对象prototype实现的
//构造函数的prototype属性指向其原型对象
//原型对象下的属性和方法可以被它的实例化对象共享 一般将属性写在构造函数中,方法写在原型下
//原型对象下的constructor属性指向其构造函数
function Person(name,age){
this.name = name;
this.age = age;
this.say =function(){
console.log(this.name+"hehe");
}
}
var p2 =new Person('ls',25);
var p3 =new Person('xw',40);
Person.prototype.eat = function(){
console.log(this.name+ " is eating!");
}
- 继承:
es5语法下,子类继承父类需要通过三步才能实现
function Coder(name,age){
// 调用父类的构造函数.call() => 1.继承属性
Person.call(this,name,age);
}
// 2.继承方法
Coder.prototype = new Person();// 将父类的原型对象赋值给子类的原型对象
// 3.修改原型对象的constructor属性
Coder.prototype.constructor = Coder;
- 原型链:
当从一个对象那里读取属性或调用方法时
如果该对象不存在这样的属性或方法,就会去自己关联的prototype对象那里寻找
如果prototype也没有,就会去prototype关联的前辈prototype那里去找
如果再没有则继续查找prototype.prototype引用的对象
依次类推,直到prototype.···prototype为undefined(Object.prototype=>undefined)
从而形成了所谓的原型链