聊聊js的类和对象

298 阅读1分钟
  • 对象
//直接定义
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)

从而形成了所谓的原型链