240 发简信
IP属地:山西
  • // 每一个构造函数都有一个属性 原型 / 原型对象
    function Student(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;

    // this.sayHi = function () {
    // console.log('test');
    // }
    }
    Student.prototype.sayHi = function () {
    console.log('大家好,我是' + this.name);
    }

    // 通过Student构造函数,创建的对象,可以访问Student.prototype中的成员
    var s1 = new Student('lilei', 18, '男');
    var s2 = new Student('hmm', 18, '女');

    s1.sayHi();
    console.dir(s1);

    // 当调用对象的属性或者方法的时候,先去找对象本身的属性/方法 ,如果对象没有该属性或者方法。此时去调用原型中的属性/方法
    // 如果对象本身没有该属性/方法,原型中也没有该属性或者方法,此时会报错
    // s1.__proto__ 对象的__proto__ 等于 构造函数的Student.prototype
    // __proto__属性是非标准的属性
    //
    // console.log(s1.__proto__ === Student.prototype);
    // console.dir(s1.__proto__);
    // console.dir(Student.prototype);

  • // 每一个构造函数都有一个属性 原型 / 原型对象
    function Student(name, age, sex) {
    this.name = name;
    this.age = age;
    this.sex = sex;

    // this.sayHi = function () {
    // console.log('test');
    // }
    }
    Student.prototype.sayHi = function () {
    console.log('大家好,我是' + this.name);
    }

    // 通过Student构造函数,创建的对象,可以访问Student.prototype中的成员
    var s1 = new Student('lilei', 18, '男');
    var s2 = new Student('hmm', 18, '女');

    s1.sayHi();
    console.dir(s1);

    // 当调用对象的属性或者方法的时候,先去找对象本身的属性/方法 ,如果对象没有该属性或者方法。此时去调用原型中的属性/方法
    // 如果对象本身没有该属性/方法,原型中也没有该属性或者方法,此时会报错
    // s1.__proto__ 对象的__proto__ 等于 构造函数的Student.prototype
    // __proto__属性是非标准的属性
    //
    // console.log(s1.__proto__ === Student.prototype);
    // console.dir(s1.__proto__);
    // console.dir(Student.prototype);

    一个例子让你彻底明白原型对象和原型链

    开篇 之前对js中的原型链和原型对象有所了解,每当别人问我什么是原型链和原型对象时,我总是用很官方(其实自己不懂)的解释去描述。有一句话说的好:如果你不能把一个很复杂的东西用...