Javascript面向对象二

可以通过指定原型属性来对所有的对象指定属性,

Object.prototype.name="zhangsan";

Object.prototype.getType=function(){

var a=typeof(this);

alert(a);

}

var o=new Object();

var o2={};

var d=new Date();

o.getType();

o2.getType();

d.getType();

alert(o.name);

alert(o2.name);

alert(d.name);

//继承

Javascript中没有extends 关键字

但是可以通过类的prototype实现继承

function Person(){

}

Person.prototype={

name:"张三",

show:function(){

alert(this.name);

}

}

function Child(){

}

Child.prototype=Person.prototype;

var c=new Child();

c.show();

当改变Child的原型的show方法的时候,

Person对象的show也就改变了。

Child.prototype.show=function(){

alert("这个方法已经改变了");

}

var p=new Person();

p.show();//提示为这个方法已经改变

为了在改变Child的属性的时候 不改变Person的属性 我们可以通过 for in 和prototype属性来完成继承

function Person(){}

Person.prototype={

name:"zhangsan",

show:function(){

alert(this.name);

}

}

function Child(){}

var c=new Child();

for(var p in Person.prototype){

Child.prototype[p]=Person.prototype[p];

}

Child.prototype.show=function(){

alert("方法已经改变");

}

var p1=new Person();

c.show();//方法已经改变

p1.show();//zhangsan

可以为每一个对象指定一个特有的方法来实现继承

Function.prototype.extend=function(source){

for(var p in source.prototype){

this.prototype[p]=source.prototype[p];

}

}

function Person(){}

Person.prototype={

name:"zhangsan",

show:function(){

alert(this.name);

}

}

function Child(){}

Child.extend(Person);

var c=new Child();

//        for(var p in Person.prototype){

//            Child.prototype[p]=Person.prototype[p];

//        }

Child.prototype.show=function(){

alert("方法已经改变");

}

var p1=new Person();

c.show();//方法已经改变

p1.show();//zhangsan

共有成员、私有成员和静态成员

Javascript并没有专门的机制来处理这些便量

想Java中我们通常定义类的时候会这么写

* public class Person{

*          private String name;

*         public void setName(String name){

*             this.name=name;

*         }

*         public String getName(){

*             return this.name;

*         }

* }

而Javascript中我们得这么写

function Person(){

var name;//私有的成员

this.setName=function(nm){

this.name=nm;

}

this.getName=function(){

return name;

}

}

我们可以这么使用了

Var p=new person();

p.setnema("zhangsan");

p.getname();

javascript中定义静态成员和方法

person.staticName="这是一个人";

person.staticMothod=function(){

alert(person.staticNamse);

}

静态的属性和方法可以直接通过类名直接调用

Person.staticMothod();

注意:一个类的实例不能调用这个类的静态方法

Javascript面向对象二的更多相关文章

  1. JavaScript 面向对象(二) —— 案例篇

    看案例前可以先看看基础篇:JavaScript 面向对象(一) —— 基础篇 案例——面向对象的选项卡:把面向过程的程序一步步改成面向对象的形式,使其能够更加的通用(但是通用的东西,一般会比较臃肿). ...

  2. JavaScript面向对象(二)——成员属性、静态属性、原型属性与JS原型链

      前  言 JRedu 上一篇博客中,我们介绍了JS中的面向对象,并详细的解释了this的指向问题.本篇博客,我们继续来学习JS的面向对象.来深入理解一下JavaScript OOP中的成员属性/方 ...

  3. javascript面向对象(二):构造函数的继承

    本文来自阮一峰 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有 ...

  4. JavaScript 面向对象(三) —— 高级篇

    JavaScript 面向对象(一) —— 基础篇 JavaScript 面向对象(二) —— 案例篇 一.json方式的面向对象 首先要知道,js中出现的东西都能够放到json中.关于json数据格 ...

  5. JavaScript 面向对象(一) —— 基础篇

    学好JS的面向对象,能很大程度上提高代码的重用率,像jQuery,easyui等,这篇博客主要从细节上一步步讲JS中如何有效地创建对象,也可以看到常见的创建对象的方式,最后也会附上一些JS面向对象的案 ...

  6. 《JavaScript面向对象编程指南(第2版)》读书笔记(二)

    <JavaScript面向对象编程指南(第2版)>读书笔记(一) <JavaScript面向对象编程指南(第2版)>读书笔记(二) 目录 一.基本类型 1.1 字符串 1.2 ...

  7. (二)Javascript面向对象编程:构造函数的继承

    Javascript面向对象编程:构造函数的继承   这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承 ...

  8. Javascript面向对象编程(二):构造函数的继承 作者:yuan一峰

    Javascript面向对象编程(二):构造函数的继承   作者: 阮一峰 日期: 2010年5月23日 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生 ...

  9. JavaScript 面向对象编程(二):继承

    Javascript面向对象编程(二):构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继 ...

随机推荐

  1. 底部带突出按钮的tabbar

    #import "ViewController.h" #import "FirstViewController.h" #import "SecondV ...

  2. iOS如何在一个包上切换正式环境和测试环境

    最近项目处于测试阶段,所以免不了每天都得打包给测试人员,由于我们公司规模比较大,项目环境也分为了三种:测试环境.预上线(预生产)环境.上线(生产)环境.所以每到了测试后期,每天打包的时间也占了不少,遇 ...

  3. jQuery----五星好评实现

    在美团.淘宝.京东等网页上,有许多商品.服务评价页面,五星好评功能很常见,本文利用jQuery实现五星好评功能. 案例图片:                                       ...

  4. ruby puts, print, p方法比较

    1.puts([obj[, obj2[, ....]]] ) 依次将obj和换行符输出到$>.若没有参数的话则只会输出换行符. 若参数是数组,则依次输出数组元素和换行符.若将既非数组又非字符串的 ...

  5. springMVC第一天——入门、整合与参数绑定

    大纲摘要: 1.Springmvc介绍 2.入门程序 3.Springmvc架构讲解 a) 框架结构 b) 组件说明 4.Springmvc整合mybatis 5.参数绑定 乱码问题解决 a) Spr ...

  6. VB6 red write DB using Microsoft DAO 3.6 Object Library

    ' -----------------------------read db Private Sub Form_Load() 'MsgBox App.Path & "\wgscd.m ...

  7. msfconsole 无法启动,解决办法

    今天突然碰上kali msfconsole 无法启动,经过查找资料,现已成功解决该问题,现将解决办法整理如下: service postgresql start # 启动数据库服务 msfdb ini ...

  8. Noip前的大抱佛脚----一些思路

    目录 一些思路 序列 函数问题 网格图 删除和询问 乘法问题 顺序问题 最值问题 研究成果 数论分块套数论分块的复杂度 一些思路 Tags:Noip前的大抱佛脚 序列 线段树(当然还要有主席树啊!) ...

  9. Deep Learning 资料总结

    http://colah.github.io/posts/2014-03-NN-Manifolds-Topology/ : 理解神经网络   ELU:

  10. tornado-About Web

    1.轻量级的web开发框架,没有像django那样的命令行工具,只用于写一些小的脚本 (1)安装tornado包 pip intall tornado # conda install tornado( ...