- 继承
`
<script>
function Person(name,age){
this.name = name;
this.age = age;
}
let p1 = new Person('zhangsan',30);
function Student(){
}
/* instanceof
来判断这个实例(p1)是不是这个构造函数(Person)实例化出来的对象*/
/* console.log(p1 instanceof Person); */ /* =>true */
// console.log(p1 instanceof Student); /* =>false */
/* 万物皆对象 */
// console.log(p1);
// console.log(p1 instanceof Object)
</script>
- 原型链继承实例化对象
`
/* 写一个类 Car color price 属性 */
/* 类 Bmw 继承Car的所有属性 并实例化Bmw这个类
写个方法可以把 color 和 price 打印到页面上 */
function Car(){
this.color = '白色'
this.price = '100w'
}
function Bmw(){}
Bmw.prototype = new Car();
Bmw.prototype.constructor = Bmw;
let b1 = new Bmw();
console.log(b1.color);
console.log(b1.price);
console.log(b1);
</script>`
-
原型链继承直接继承原型 `
// /* 不变的属性都可以直接写入Person.prototype */ // function Student(){ // } // /* Student想要继承Person的属性 */ // /* 直接继承prototype */ // Student.prototype = Person.prototype; // let stu1 = new Student(); // console.log(stu1.head); // console.log(stu1.foot); // // console.log('stu1',stu1); // /* 缺点: */ // /* 任何对Student.prototype的修改,都会反映到Person.prototype */ /* Student的constructor不会指向自己 */ // Student.prototype.name = 'zhangsan' // console.log('p1',p1); /* 写一个类 Car color price 属性 使用直接继承prototype的方式实现*/ /* 类 Bmw 继承Car的所有属性 并实例化Bmw这个类 写个方法可以把 color 和 price 打印到页面上 */ function Car(){ } Car.prototype.color = '白色' Car.prototype.price = '100w' function Bmw(){ this.print = function (){ document.write(`${this.color}--${this.price}`); } } Bmw.prototype = Car.prototype; let b1 = new Bmw(); b1.print(); -
利用空对象作为中介
`/** * @param 子类 * @param 父类 * */ function extend(child, parent) { function f() { } f.prototype = parent.prototype; child.prototype = new f(); child.prototype.constructor = child; } // Object.prototype.foot = 2; /* 空对象,几乎不占内存 修改Student的prototype对象,不会影响到Person的prototype对象 */ /* 父类 */ function Person() { } Person.prototype.head = 1; Person.prototype.foot = 2; /* 子类想继承父类的属性 */ function Student() { } /* 新建一个空对象 */ // function f(){} // /* 把父类的原型直接赋值给空对象的原型上 */ // f.prototype = Person.prototype; // /* 把空对象的实例化对象 给到子类的原型上 */ // Student.prototype = new f(); // /* ★constructor构造器都是指向自己的 */ // Student.prototype.constructor = Student; extend(Student, Person) let stu1 = new Student(); console.log(stu1.foot); console.log(stu1); /* 不会影响到Person的prototype对象 */ // Student.prototype.age = 30; // let p = new Person(); // console.log(p); /* 原型链就是一层一层向上找的过程 */ /* 原型链继承就是利用了上面这种特性 */ /* 写一个类 Car color price 属性 */ /* 类 Bmw 继承Car的所有属性 并实例化Bmw这个类 写个方法可以把 color 和 price 打印到页面上 */ function Car() { } Car.prototype.color = '白色' Car.prototype.price = '100w' // function f(){} // f.prototype = Car.prototype; // Bmw.prototype = new f(); // Bmw.prototype.constructor = Bmw; extend(Bmw, Car) function Bmw() { this.print = function () { document.write(`${this.color}--${this.price}`); } } let b1 = new Bmw(); b1.print();`