对象冒充继承和原生链实现继承的方法和问题

function People(){

  this.name=‘zhangsan‘;

  this.age = 20;

  this.run = fcuntion(){

   alert(this.name+‘在运动‘);

  }  

}

//原生链

People.prototype.sex = ‘男‘;

People.prototype.work = function(){

  alert(this.name+‘在工作‘);

}

//1.对象冒充实现继承:只能继承构造函数里的 不能继承原生链

function Person(){

  People.call(this);//对象冒充实现继承 只能继承构造函数里的 不能继承原生链

}

var a = new Person();

a.run();//可以实现

a.work();//不可以实现

//2.原生链实现继承:可以继承构造函数里的内容,也可以继续原生链里的内容

function Human(){

}

Human.prototype=new People();

var b = new Human();

b.run();//可以实现

b.work();//可以实现



问题:无法传参

var c = new Human(‘lisi‘,20);

会提示undefind在运动

原文地址:https://www.cnblogs.com/yifengs/p/10149928.html

时间: 2024-10-10 11:11:03

对象冒充继承和原生链实现继承的方法和问题的相关文章

js 原型链和继承(转)

在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JS 的 new 到底是干什么的 1. 什么是 JS 原型链? 我们知道 JS 有对象,比如 var obj = { name: "obj" }; 我们通过控制台把 obj 打印出来: 我们会发现 obj 已经有几个属性(方法)了.那么问题来了:valueOf / toString / constructor 是怎么来?我们并没有给 obj.valueOf 赋值呀. 上面这个图有点难懂,我手画

es5继承和es6类和继承

es6新增关键字class,代表类,其实相当于代替了es5的构造函数 通过构造函数可以创建一个对象实例,那么通过class也可以创建一个对象实列 /* es5 创建一个person 构造函数 */ function person (name,age) { this.name = name this.age = age } /* 定义原型链上的方法sayholle */ /* 为什么要将方法定义在原型上,定义在原型上的方法,所有的实例对象都共享 不会出现没实列一个对象都重新创建一个这个方法 */

ruby中的链式访问和方法嵌套

先看一道题,这道题是codewars上的一道题,我很早就看到了,但是不会写.等到又看到这道题的时候,我刚看完元编程那本书,觉得是可以搞定它的时候了.废话不多说,先看这道题,题目最开始是为JavaScript写的,但是也放在了ruby语言里面,这个没有关系.题目内容是有一个类Calc,通过链式方法调用,可以实现加减乘除.如图给的四个例子.数字只有0-9,运算只有加减乘除,而且每个运算只有一个操作符.(可以先不看下面,自己先想一下怎么写) 首先,每一个例子都是同样的结构---类名和四个方法.拿第一个

javascript 组合模式,对象冒充+原形链继承

//使用对象冒充来继承,只能继承构造对象中的信息 //原形中的无法继承构造对象中的方法每次实例化都会分配空间 //造成空间浪费 function Box(name,age){ this.name=name; this.age=age; this.run=function(){ return this.name+this.age+"运行中..." } } Box.prototype.family='加'; function Desk(name,age){ Box.call(this,na

js最好的继承机制:用对象冒充继承构造函数的属性,用原型链继承 prototype 对象的方法。

js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } ClassA.prototype.sayColor = function () { alert(this.color); }; function ClassB(sColor, sName) {//在 ClassB 构造函数中,用对象冒充继承 ClassA 类的 sColor 属性 ClassA.call(th

对象冒充实现继承,原型链继承方法,以及组合继承模式

function Person (){ this.name=“张三”; this.run = function(){ alert( this.name+'在运动' ) } } Person.prototype.work = function(){ alert( this.name+'在工作’ ) } // web类 继承person类 原型链+对象冒充的组合继承模式 function web(){ Person.call( this )  //  对象冒充实现继承 } var w = new w

【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链

JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承. 类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply实现对象冒充,把类型定义的东西都复制过来,这样的继承子类与父类并没有多少关联,不互相影响,有利于保护自身的一些私有属性. 原型继承:每个函数都有自己的原型(prototype)属性,这个属性是在生成实例对象时自动创建的.它本身又是一个对象,拥有能够在实例间共享的属性和方法.而实例本身的属性和方法,则

对象冒充 实现多继承

注意:原型链时不支持多继承的 // 对象冒充实现类的多重继承 var ClassA=function (color){ this.color = color; this.sayColor = function(){ console.log(this.color); } }; var ClassB=function (name){ this.name = name; this.sayName = function(){ console.log(this.name); } }; //C 同时继承 A

原型、原型对象的理解 及其原型链继承

在 ES5 中,有的人可能对原型,原型对象,及其原型链不是很清楚,今天我就说说对这些的深入认识下.(如果有什么不懂得欢迎留言探讨,当然如果有什么写的不恰当的也希望大家留言备注.) 首先,再说原型与原型对象之前,当然有必要清楚构造函数,实例,原型与原型对象之间的关系.其实他们的关系也很简单. 构造函数,实例,原型与原型对象之间的关系: 构造函数有它自己的属性及其方法,其中包括自己定义的属性和方法外,还有两个特殊属性(prototype.constructor):而每个他的实例都会拥有它的所有属性和