1. 对象的定义

  //定义对象
  function User(){ //在构造方法中定义属性
this.name = '张三';
this.age = 12; //在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
} //原型链中定义属性
User.prototype.sex = '男'; //原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
} // 静态方法的声明
User.getInfo = function () {
alert('我是静态方法')
} //对象的使用: 实例化对象
var user = new User('张三', 3); //属性的调用
alert('姓名:'+ user.name + '; 性别:' + user.sex); // 弹出: 姓名:张三; 性别:男 //给对象属性重新赋值
user.name = '李四';
user.sex = '女'; //方法的调用
user.run(); // 弹出:李四在跑步
user.work(); // 弹出:李四在工作 //静态方法的调用
User.getInfo(); // 弹出: 我是静态方法

注意: 原型链中声明属性将会多个实例共享,而构造函数不会

对象的继承

1. 对象的继承 之 对象冒充继承

 function User(){
this.name = '张三';
//在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
} //原型链中定义属性
User.prototype.sex = '男'; //原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
} //对象中的继承一: 对象冒充继承
function Student(){ //Student 继承 User对象,此方法叫: 对象冒充继承
User.call(this);
} var student = new Student();
student.run(); // 弹出:张三在跑步
student.work(); //报错,原因是: 对象冒充继承的方法只继承对象的构造函数的属性和方法

注意: 对象冒充继承的方法 只能 继承对象的构造函数的属性和方法,不能 继承原型链中的函数和方法

2. 对象的继承 之 原型链继承

 function User(){
this.name = '张三';
//在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
} //原型链中定义属性
User.prototype.sex = '男'; //原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
} //对象中的继承一: 原型链继承实现继承
function Student(){
}
Student.prototype = new User(); var student = new Student();
student.run(); // 弹出:张三在跑步
student.work(); // 弹出:张三在工作

注意:原型链继承的方法 可以 继承对象的构造函数的属性和方法,也可以 继承原型链中的函数和方法

  function User(name){
this.name = name;
//在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
} //原型链中定义属性
User.prototype.sex = '男'; //原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
} //带参数对象的实例化方法:
var user1 = new User('张三');
user1.run(); // 弹出: 张三在跑步
user1.work(); // 弹出:张三在工作 //对象中的继承一: 原型链继承实现继承
function Student(name){
}
Student.prototype = new User(); var student = new Student('李四');
student.run(); // 弹出: undefined在跑步
student.work(); // 弹出:undefined在工作

注意:原型链继承有个缺点就是 在实例化子类时,无法 给父类传参,如上代码,子类调用父类的方法时, 弹出传参属性为 undefined

为了解决此缺点,则可以使用  冒充对象继承 + 原型链继承的组合模式

3.  冒充对象继承 + 原型链继承的组合模式

function User(name){
this.name = name;
//在构造方法中定义方法:
this.run = function(){
alert(this.name + '在跑步')
}
} //原型链中定义属性
User.prototype.sex = '男'; //原型链中定义方法
User.prototype.work = function(){
alert(this.name + '在工作')
} //对象中的继承一: 原型链继承实现继承
function Student(name){ //冒充对象继承时,可以给父类传参
User.call(this, name);
} //原型链继承父类
//Student.prototype = new User(); //因冒充对象继承时,已经继承了父类的构造函数中的属性和方法,因此在原型链继承中也可只继承父类的原型链的属性和方法,即
Student.prototype = User.prototype; var student = new Student('李四');
student.run(); // 弹出: 李四在跑步
student.work(); // 弹出:李四在工作

ES5_对象 与 继承的更多相关文章

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

    js最好的继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } Class ...

  2. 对象的继承关系在数据库中的实现方式和PowerDesigner设计

    原文:对象的继承关系在数据库中的实现方式和PowerDesigner设计 在面向对象的编程中,使用对象的继承是一个非常普遍的做法,但是在关系数据库管理系统RDBMS中,使用的是外键表示实体(表)之间的 ...

  3. 类和对象:继承 - 零基础入门学习Python038

    类和对象:继承 让编程改变世界 Change the world by program 上节课的课后作业不知道大家完成的怎样?我们试图模拟一个场景,里边有一只乌龟和十条鱼,乌龟通过吃鱼来补充体力,当乌 ...

  4. #JavaScript对象与继承

    JavaScript对象与继承 JavaScript是我在C语言之后接触的第二门编程语言,大一暑假的时候在图书馆找了一本中国人写的JavaScript程序设计来看.那个时候在编程方面几乎还是小白,再加 ...

  5. Javascript学习6 - 类、对象、继承

    原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...

  6. (79)Wangdao.com第十五天_JavaScript 对象的继承_prototype原型对象_封装_函数式编程

    javascript 内置了许多 function 函数(){...} js 执行首先就会执行自己内置的函数定义 (function Function.function Object) 对象的继承 大 ...

  7. Javascript实现对象的继承

    在Java和C#中,你可以简单的理解class是一个模子,对象就是被这个模子压出来的一批一批月饼.压个啥样,就得是个啥样,不能随便动,动一动就坏了.而在Javascript中,没有模子,月饼被换成了面 ...

  8. 关于js的对象原型继承(一)

    javascript中,对象的继承是通过原型去继承. 可以这样理解:js中的对象,包含的除了属性和方法,还有一个最基本的原型__proto__对象.这个原型__proto__指向谁,这个对象就继承谁. ...

  9. js一种继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法。

    js一种继承机制:用对象冒充继承构造函数的属性,用原型prototype继承对象的方法. function ClassA(sColor) { this.color = sColor; } ClassA ...

随机推荐

  1. Java JDBC利用反射技术将查询结果封装为对象

    1.JDBC将返回结果集封装成对象demo class JdbcDemo { /** * 获取数据库列名 * @param rs * @return */ private static String[ ...

  2. HTTP和HTTPS概念

    HTTP和HTTPS HTTP协议(HyperText Transfer Protocol,超文本传输协议):是一种发布和接收 HTML页面的方法. HTTPS(Hypertext Transfer ...

  3. SQL 对decimal类型转换为int类型

    ) AS INT) CountQty select ISNULL( CAST(E.Qty AS INT),0 )  FROM  OrderDetail E 空值 需要默认为0 即可

  4. C语言 运算符优先级

    规律小结: 结合方向只有三个是从右往左,其余都是从左往右. 所有双目运算符中只有赋值运算符的结合方向是从右往左. 另外两个从右往左结合的运算符也很好记,因为它们很特殊:一个是单目运算符,一个是三目运算 ...

  5. RSA签名,加解密处理核心文件

    import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.secur ...

  6. k8s记录-kubectl常用

    kubectl create/delete -f xxx.yml kubectl get all -A kubectl get pods -o wide kubectl describe pods p ...

  7. Kubernetes 服务质量 Qos 解析 - Pod 资源 requests 和 limits 如何配置?

    QoS是 Quality of Service 的缩写,即服务质量.为了实现资源被有效调度和分配的同时提高资源利用率,kubernetes针对不同服务质量的预期,通过 QoS(Quality of S ...

  8. 修改jar的.class文件,并重新打包

    使用javassist修改.class文件,并重新打包 Javassist是一款字节码编辑工具,可以直接编辑和生成Java生成的字节码,以达到对.class文件进行动态修改的效果.熟练使用这套工具,可 ...

  9. 查看端口被哪个程序占用的DOS命令

    netstat -aon | findstr 80Proto Local Address Foreign Address State PID==== ============ ============ ...

  10. Qt deletelater函数分析(1)

               生活的全部意义在于无穷地探索尚未知道的东西,在于不断地增加更多的知识.--左拉 该函数是QObject类的函数:                             ---- ...