JS面向对象编程实现

Function 在 中是一个很特殊的对象,其特殊性体现在它的多重身份。

Function 可以声明普通的函数,这一点和其他语言中的函数概念是相同的。除此以外,Function还可以用作类型的声明和实现、对象的构造函数,以及类引用。

Apply和Call方法可以将函数绑定到其它对象上执行。

使用for(…in…)语句可以遍历对象的所有属性和方法。如下面的例子就遍历了test1对象的属性和方法,如果是属性刚输出属性,如果是方法刚执行方法。

function test1()

{

       this.p1="p1";

       this.p2="p2";

       this.f1=function()

       {

              alert("f1");

       }

       this.f2=function()

       {

              alert("f2");

       }

}

var obj1=new test1();

//遍历t的所有属性

for(p in t)

{

       //如果是函数类型刚执行该函数

       if(typeof(t[p])=="function")

       t[p]();

       //输出其它类型的属性

       else alert(t[p]);

}

1.       类的声明

(1)、使用this关键字

function test1()

{

       this.p1="p1";

       this.p2="p2";

       this.f1=function()

       {

              alert("f1");

       }

       this.f2=function()

       {

              alert("f2");

       }

}

在中,成员变量没有私有与公有机制,但可以通过在类内部使用var来声明局部变量。其作用域是类定义的内部。

 

(2)、使用ptototype方式的类声明

如果要声明一个类的实例属性或方法,可以使用中的对象的prototype属性。例如:

Test1.prototype.prop2=”prop2”;

Test1.prototype.method2=function(){

    Alert(this.prop2);

}

使用prototype属性声明类,如下

function test()

{           

}

test.prototype={

       p1:"p1";

       p2:"p2";

       f1 : funciton ()

       {

              alert("f2");

       }

}

2.       继承

本身并没有提供继承的语法支持,但是在仍然可以采用复制属性和对象的方法实现继承。

function test2(){}

for(p in test.prototype)

{

test2.prototype[p]=test.prototype[p];

}

test2.prototype.newMethod=function()

{

alert("newMethod");

}

另外可以参考Prototype框架实现继承的方法:

object.extend=function (destination,source)

{

for(property in source)

{

        destination[property]=source[property];

}

return destiantion;

}

function test2() {}

test2.prototype=object.extend ({newMethod :function ()

{alert (“newMethod”);}

},

Test.prototype

);

3.       多态

多态的实现可以采用和继承类似的方法。首定义一个抽象类,其中可以,调 用一些虚方法,虚方法在抽象类中没有定义,而是通过其具体实现类来实现的。例如:

object.extend=function (destination,source)

{

for(property in source)

{

        destination[property]=source[property];

}

return destiantion;

}

//定义一个抽象基类

function base() {}

base.prototype={   

initialize:function(){

        this.oninit();//调用了一个虚方法

}

}

 

function test()

{

//构造函数

}

 

test.prototype=object.extend(

                                            {

                                                   prop:"prop",

                                                   oninit :function()

                                                   {

                                                          alert(this.prop)

                                                   }

                                            },base.prototype

                                            );

 

function test2()

{

}

 

test2.prototype=object.extend(

                                             {

                                                    prop2: "prop2";

                                                    oninit:function()

                                                    {

                                                           alert(this.prop2);

                                                    }

                                             },base.prototype

                                             }

转载于:https://www.cnblogs.com/Frontview/archive/2008/11/07/1328631.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/463696.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 界面布局 很好的一篇总结 【转】

布局: 在 android 中我们常用的布局方式有这么几种: 1.LinearLayout ( 线性布局 ) :(里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角) 线性布局分为水平线性和垂直线性二者的属性分别为&#xf…

MapInfo开发心得——控件篇

前阵做一个项目过程中,需要结合MapInfo进行地方展示开发,积累一点点心得与大家共享以下所有基于MapXtreme 6.6MapInfo提供了足够强大的WinForm地图空间,可以很方便地在VS中拖拉摆放。但如此强大的控件也带来了封闭性太强的问题。现在我们都接…

linux下epoll如何实现高效处理百万句柄的

开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll。大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的socket句柄,比起以前的select和poll效率高大发了。我们用起epoll来都感觉挺爽…

89个嵌入式相关概念,你懂了几个?

嵌入式、计算机的学习,最基础的就是弄清一些概念。嵌入式、计算机相关的概念很多,这次汇总整理一些:1. 操作系统(Operating System,OS):是管理计算机硬件与软件资源的系统软件,同时也…

每天一个linux命令(lsof)

losf----系统级监控、诊断工具安装:yum install lsof格式:lsof [选项] [绝对路径文件名 | 其他参数]主要选项:D:递归查找除该路径下所有打开的文件[rootroot ~]# lsof D /usr/lib COMMAND PID USER FD TYPE DEVICE SIZE…

正确使用PresentModalViewController

Present ViewController Modally 一、主要用途 弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerController等。弹出模态ViewController主要使用于一下这几种情形: 1、…

word 2007 中插入图片无法显示,只能显示底部一部分

故障现象 向正在编辑的Word文档中插入一个图形时,发现插入的图形只显示出了一部分。下半部分,图片上面有文字,还能输入文字和回车。好像图片在文字下面一样,就露出了一个底部。无论怎样调整都不能解决问题,如果用浮…

使用VLC转码,在HTML5页面播放实时监控

首先要获取摄像机品牌的RTSP地址&#xff1a; 如大华的是rtsp://user:pwdip:port/cam/ realmonitor?channel1&subtype0 海康的是rtsp://user:pwdip:port/MPEG-4/ch1/main/av_stream Html5 <video>并不支持rtsp,所以使用vlc进行转码,将rtsp转http流,这样<video&g…

聊聊Linux中线程和进程的联系与区别!

大家好&#xff0c;推荐飞哥的一篇文章&#xff01;关于进程和线程&#xff0c;在 Linux 中是一对儿很核心的概念。但是进程和线程到底有啥联系&#xff0c;又有啥区别&#xff0c;很多人还都没有搞清楚。在网上对进程和线程的讨论中&#xff0c;很多都是聚集在这二位有啥不同。…

Docker swarm 实战-部署wordpress

Docker swarm 实战-部署wordpress 创建一个overlay的网络 docker network create -d overlay demo6imq8da3vcwvj2n499k4bwdlt docker network ls NETWORK ID NAME DRIVER SCOPE feea5ba8507b bridge bridge …

浅谈jQuery的选择器

jQuery的选择器可谓之强大无比&#xff0c;这里简单地总结一下常用的元素查找方法 $("A B") 查找A元素下面的所有子节点&#xff0c;包括非直接子节点 $("A>B") 查找A元素下面的直接子节点 $("AB") 查找A元素后面的兄弟节点&#xff0c;包括非…

注册广播

动态注册&#xff1a;detectionSDkBroadcastReceiver new DetectionSDkBroadcastReceiver();IntentFilter intentFilter new IntentFilter();intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);intentFilter.addAction(Intent.ACTION_MEDIA_EJECT);intentFilter.addDataS…

2018年上半年总结

2018年上半年即将过去&#xff0c;在这半年里经历了很多的事情&#xff0c;让自己在各方面成长了很多&#xff0c;但也失去了很多&#xff0c;有些事情让我刻骨铭心&#xff0c;也让我明白了很多的事情&#xff0c;包括&#xff1a;家庭、工作、生活、相处等。 先说下工作上的事…

比GDB方便n倍的调试工具——CGDB

CGDB 是GDB的前端&#xff0c;在终端窗口中意图形化的形式来调试代码(基于ncurse)&#xff0c;非常方便。相对于GDB来说&#xff0c;可以很大的提高效率。这篇文章就来分享一下CGDB的最基本使用方法&#xff0c;如果是第一次听说&#xff0c;强烈建议您体验一下&#xff0c;一定…

linux--切换ipython解释器到python3

Ipython修改为python3解释器&#xff1a; which ipython --得到路径 cat 路径--查看执行的解释器版本 sudo gedit 路径--修改解释器版本为python3保存即可&#xff0c;保存的时候提示异常&#xff0c;这个是正常现象&#xff0c;实际上已经保存成功。测试 which ipython 路径 c…

数据库中字段类型Number(n,m)大概说明

number可以存储浮点数&#xff0c;也可以存储整数。Number(n,m) int类型只能存放整数。 a、number(4,3)是表示这个数一共有4位是有效位,后面的3表示有3个是小数也就是这个数&#xff0c;只能是1.234,这样格式的最大只能是9.999,b、number&#xff08;3,4&#xff09; 表示这个…

WCF Security userName/Password

1. Transfer SecurityTransfer Security 主要包括三个方面&#xff1a; "消息完整性(Message Integrity)"、"消息机密性 (Message Confidentiality)" 和 "交互验证(Mutual Authentication)"。消息完整性必须确保消息在传输过程中没有被篡改&…

Sencha Touch2中数据的获取

根据Sencha Touch技术框架的特点&#xff0c;前台展示的绝大部分数据都是通过ajax方式获取&#xff0c;譬如列表数据的获取、表单数据的获取等等。列表数据的获取&#xff0c;一般是通过store组件和list组件进行结合&#xff1b;表单数据的获取通常使用Ext.request方式获取。列…

boost库中mutex、condition_variable与mutex::scoped_lock联合使用实现线程之间的通信

最近在公司负责一个线程池的模块&#xff0c;里面用到了boost库中的mutex、condition_variable与mutex::scoped_lock&#xff0c;在此总结下线程池在使用时的方式和要点&#xff0c;这里记录了线程之间的通信方式&#xff0c;希望对学习线程之间(同一个进程)通信的同志们有所帮…

caffe运行训练脚本时报错:Unknown bottom blob 'data' (layer 'conv1',bottom index 0)

报错的两种报错原因&#xff1a; 1.输入数的路径错误&#xff0c;需要将路径进行修改排查目录是否出错 2.训练原数据格式不对 3.train.prototxt文件中并未设置test层&#xff0c;而在solver层则设置了test的迭代等参数 两种解决方法 1.对错误原因1&#xff0c;则改为正确路径 2…