<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>实例/原型继承</title></head><body></body></html><script> /** * 优点: * 简单容易实现,可以直接访问父级原型上的属性的方法; * 最终实例是 子类实例, 也是父类的实例 * 父类新增的原型的方法子类都能访问 * 缺点: * 想实现继承必须 new 父级构造函数 * 创建的子类实例 无法向父类传参 * 无法实现多继承 * 来自父级的所有`引用类型`都是共享的 */ function Language() { this.arr = ['html', 'css']; this.str = '123' }; function Css(){ this.css = 'css' } // 多继承只能继承最后一个 无法给父级传参 JavaScript.prototype = new Css() JavaScript.prototype = new Language(); function JavaScript(val) { this.val = val; JavaScript.prototype.get = function (val) { console.log(val); // get fun console.log(this.val); // this.val } } const js1 = new JavaScript('this.val'); const js2 = new JavaScript(); // 这样直接修改Language上面的属性,会导致在其他实例中的同属性也会被修改掉 // 父级属性·引用类型·共享 console.log(js1.arr); // (2) ["html", "css"] console.log(js2.arr); // (2) ["html", "css"] js1.arr.push('JavaScript') console.log(js1.arr); // (3) ["html", "css", "JavaScript"] console.log(js2.arr); // (3) ["html", "css", "JavaScript"] // 基本类型不共享 js1.str = 333; console.log(js1.str); // 33 console.log(js2.str); // '123' js1.get('get fun') // 无法实现多继承 根据上面案例只能继承 Language 无法继承 Css console.log(js1.css); // 1.1实例继承.html:70 undefined</script>