博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS面向对象编程之对象(简化版)
阅读量:4325 次
发布时间:2019-06-06

本文共 2304 字,大约阅读时间需要 7 分钟。

上次网上看了一篇这个文章,然后乱七八糟晕头转向把我晕的够呛。看了半天没找到错的地方但是浏览器Hello world就是没有定义。。。我也是醉了,最后发现我认为是废话的话一句话竟然有用!!!所以我还是简化一下,大家看着都舒服

 

 

首先先实例化一个函数

function HelloWorld(){    alert('hello world!');}

 

然后针对这个函数给他new一个

function _test(){    var obj = new HelloWorld();}

 

然后调用方法可以使用this.name调用了

HelloWorld.prototype = {name : 'JavaScript',sayHello : function() {    alert(this.name);}}

 

 

然后可以给他加方法了

function _test(){    var obj = new HelloWorld();    obj.sayHello();}

 

那么调用_test方法后就会先后打印hello wordl!和JavaScript(一个是构造方法中的alert,一个是sayHello方法中的alert)。注意sayHello方法中的 alert引用了this关键字,该关键字表示的就是HelloWorld对象,即默认指向该对象,和JAVA中的this关键字一样。

对于向一个对象添加实例方法和属性,我们可以采用上述的方式,即使用prototype关键字进行赋值,格式如下:

对象名称.prototype = {属性一 : 属性值,属性二 : 属性值,方法一 : function(参数列表) {    方法体;},方法二 : function(参数列表) {    方法体;}

 

}

 

 

以下为扩展!!!!!!!

 

 

可以按照如上方式对一个对象进行多个属性和方法的定义,这样在new一个对象后,就可以使用实例名称.属性或方法来获取属性或执行方法了。

    在上面的方法中,大家不知道发现没有对象的属性是可以直接访问的,比如访问HelloWorld对象的name属性就可以使用obj.name直接获取。 这就好比我们JAVA中的公有属性了,而且我们还可以直接对name属性进行赋值操作。所以现在有一个问题了,我们如何给一个对象赋一个私有成员变量呢? 那我们就可能要改一下HelloWorld类的声明方式了,不使用prototype进行类的属性和方法声明,而是直接使用内嵌函数和属性进行声明,修改 的HelloWorld如下,我们命名为HelloWorld2:

function HelloWorld2(){    var privateProp = 'hello world 2!';    this.method = function() {         alert(privateProp);    }}

 

    看到HelloWorld2的类申明方式了没?是直接在函数内部进行了函数嵌套申明,而且我们还设置了一个局部变量privateProp,即我们的私有 成员变量,该变量只能被HelloWorld2内部的函数进行访问,外部访问是不允许的,这样我们就可以通过使用变量的作用域来巧妙的设置类的私有变量 了。我们应用如下:

function _test2(){    var obj2 = new HelloWorld2();    obj2.method();   // 调用该方法将打印'hello world 2!    alert(obj2.privateProp); // 将打印undefined}

 

    上面所说的都是如何定义一个类,以为如何为一个类定义属性和方法,由于采用prototype方式进行定义清晰明了,所以一般都是使用该方式进行类的定 义,而且现在很多AJAX框架中都使用了类似的类声明方式。而且类的私有成员变量却只能在类的构造方式中的函数进行访问,这样类的prototype声明 的方法就不能访问该私有成员变量了,而且可读性方面也没有prototype方式好。

    好了,上面所说的都是定义一个类的实例方法和属性。在JAVA中类有实例方法和属性与类方法和属性之分。所谓类属性和方法就是该类的所有实例都只维护一份 类属性和类方法的副本,而不是每个实例都维护一套,这和实例属性和实例方法是不一样的。那么在JS中如何为一个类定义静态类方法和类属性呢?我们可以直接 为类添加静态属性和静态方法,比如为HelloWorld类添加一个age的静态属性和一个hello的静态方法,那么声明如下:

HelloWorld.age = 22;HelloWorld.hello = function() {    alert(HelloWorld.age);}

 

    那么这样就为类HelloWorld声明了静态属性age和静态方法hello了。在使用的时候就直接使用类名进行访问了,但是不能使用实例进行访问,这点与JAVA中的是一致的,测试如下:

function _test(){    var obj = new HelloWorld();    obj.sayHello();  // 正确,实例方法,可以通过实例进行访问    HelloWorld.hello(); // 正确,静态方法,通过类名进行直接访问    obj.hello(); // 错误,不能通过实例访问静态方法。会报JS错误!}

 

转载于:https://www.cnblogs.com/LoveOrHate/p/4385681.html

你可能感兴趣的文章
Swift给每个开发者赢取500万的机会!不看一生后悔。
查看>>
UIView详解
查看>>
MSSQL如何将查询结果拼接成字符串
查看>>
20169217 《Linux内核原理与分析》 第十周作业
查看>>
20169217 2016-2017-2 《网络攻防实践》第四周学习总结
查看>>
MemCache在Windows下环境的搭建及启动
查看>>
<nginx.conf> nginx设置用户权限
查看>>
python实现redis三种cas事务操作
查看>>
同步异步与阻塞非阻塞
查看>>
C++ 安全单例模式总结
查看>>
bzoj4754: [Jsoi2016]独特的树叶
查看>>
toj 4069 简易统计
查看>>
【Unity】Update()和FixedUpdate()
查看>>
UNITY中有Timer
查看>>
[JSOI2010] 连通数
查看>>
二分和三分
查看>>
支付宝新漏洞引发恐慌,那如何关闭小额免密支付呢
查看>>
Mac OS 快捷键
查看>>
java 下载文件
查看>>
The King’s Problem 强连通
查看>>