JavaScript 面向对象编程之一
一:Class and private And public
JS 中的类以 function 进行声明,同时 JS 也支持声明私有 private 和公有 public 成员,只不过跟 C# 不一样,它们不是使用这两个关键字实现的。具体如何实现,直接看代码:
function SampleClass(arg1) {
/* 声明了一个私有方法 */
function priMethod1() {
alert("private method 1");
}
/* 声明了一个私有变量,并赋值 */
var x1 = 3;
/* 声明了一个私有变量,并赋值 */
var x2 = arg1;
/* 声明了一个私有变量,并立刻执行 priMethod1,将返回值赋值给该变量 */
var y = priMethod1();
/* 声明了一个私有变量,并定义了一个方法,并将该方法的引用赋值给该变量
备注:所以,不会执行,到 z(); 时候才会执行;
*/
var z = function() {
alert("private method 2");
};
/* 声明了一个共有变量,并定义了一个方法,并将该方法的引用赋值给该变量
*/
this.PubMethod1 = function () {
alert("public method 1");
};
/* 以下为 公共成员 ,注解同上*/
this.A = 2;
this.B = this.PubMethod1();
this.C = function() {
alert("public method 2");
};
}
上面的代码中我们可以理解 SampleClass 同时也声明了一个带一个参数的构造器,构造器参数本身左右 SampleClass 的一个私有变量存在;
二:new SampleClass(2) 发生了什么事情?
如果用 OO 的思想来理解,
var testClass = new SampleClass(2);
首先成了一个对象,并执行构造方法。在上面的代码中,注释中,已经注明了哪些是声明,哪些是在声明的同时执行了方法。
也就是说,如果 new SampleClass(2),从 UI 的角度来说,我们会看到弹出两条消息:
"private method 1" 和 "public method 1"。
在 testClass 上,我们也体会到 私有成员 和 公有成员 的区别,如果我们在 Visual Studio 中编码,通过 testClass 只能智能感知到公有成员。
三:JS 中属性?
JS 中没有属性这一说,以
this.B = this.PubMethod1();
举例,我们调用在:
testClass.B;
的时候,实际上根本不会去执行 PubMethod1 这个方法,PubMethod1 这个方法实际上是在构造器中已经被执行过了。所以,我们要通过 testClass 去执行代码,只能通过为 SampleClass 定义方法的方式来完成。
四:this 关键字以及如何在类内部获取到当前对象
在 SampleClass 中,我们通过 this 关键字来创造公有成员,即意味着,通过 this 在类型内部获取到了当前对象。那么,是否在 SampleClass 内部使用 this 获取到的永远是当前对象内?显然不是的。假设在 SampleClass 内部,有如下一段代码:
this.SomeData = [];
this.TestMethod1 = function() {
$.ajax({
type: "GET",
url: "http://localhost:7340/Paper/GetQuestionUnit",
success: function(data) {
this.SomeData = data;
}
});
};
实际上,在 success 回调方法内部,对于 this.SomeData 的赋值是不会成功的。如果我们通过调试器,查看此处的 this,它代表是回调方法的引用所代表的那个对象本身,如下:

那么,我们就是要在方法内部得到当前对象怎么办,方法是在 SampleClass 内部声明一个私有成员,然后:
var parentThis = this;
然后,在你需要用到当前对象的时候,使用 parentThis 就可以了。
JavaScript 面向对象编程之一的更多相关文章
- JavaScript面向对象编程学习笔记
1 Javascript 面向对象编程 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例 ...
- 快速学习JavaScript面向对象编程
到处都是属性.方法,代码极其难懂,天哪,我的程序员,你究竟在做什么?仔细看看这篇指南,让我们一起写出优雅的面向对象的JavaScript代码吧! 作为一个开发者,能否写出优雅的代码对于你的职业生涯至关 ...
- 深入理解Javascript面向对象编程
深入理解Javascript面向对象编程 阅读目录 一:理解构造函数原型(prototype)机制 二:理解原型域链的概念 三:理解原型继承机制 四:理解使用类继承(继承的更好的方案) 五:建议使用封 ...
- 【转】Javascript 面向对象编程(一):封装
原文链接:http://www.ruanyifeng.com/blog/2010/05/object-oriented_javascript_encapsulation.html Javascript ...
- Javascript 面向对象编程(一):封装 by 阮一峰
<Javascript高级程序设计(第二版)>(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Java ...
- 转:javascript面向对象编程
作者: 阮一峰 日期: 2010年5月17日 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学 ...
- 探讨javascript面向对象编程
(个人blog迁移文章.) 前言: 下面将探讨javascript面向对象编程的知识. 请不要刻意把javascript想成面向对象编程是理所当然的. javascript里面,对象思想不可少,但是不 ...
- JavaScript面向对象编程(一)原型与继承
原型(prototype) JavaScript是通过原型(prototype)进行对象之间的继承.当一个对象A继承自另外一个对象B后,A就拥有了B中定义的属性,而B就成为了A的原型.JavaScri ...
- JavaScript面向对象编程(二)构造函数和类
new关键字和构造函数 在文章JavaScript面向对象编程(一)原型与继承中讨论啦JavaScript中原型的概念,并且提到了new关键字和构造函数.利用new关键字构造对象的实例代码如下: // ...
- JavaScript 面向对象编程(三)如何写类和子类
在JavaScript面向对象编程(一)原型与继承和JavaScript面向对象编程(二)构造函数和类中,我们分别讨论了JavaScript中面向对象的原型和类的概念.基于这两点理论,本篇文章用一个简 ...
随机推荐
- 【LOJ】 #2665. 「NOI2013」树的计数
题解 我们统计深度对于bfs序统计,树结构出现分歧的地方必然是BFS序的最后一段,这个最后一段同时还得是dfs序上连续的一段 如果不是bfs序的最后一段,那么必然下一层会有节点,如果树结构分歧了,那么 ...
- windows7无声音,提示未插入扬声器或耳机的解决
windows7无声音,提示未插入扬声器或耳机的解决: http://jingyan.baidu.com/article/358570f6043a85ce4624fc47.html
- 在android studio中集成javah, ndk-build进行JNI开发
最近在搞一个android上控制LED灯闪烁的功能,用到了串口编程,搜索了一下,发现Google发布了一个demo,android-serialport-api.有现成的代码和APK,要想自己改JNI ...
- Pytho并发编程-利用协程实现简单爬虫
from gevent import monkey;monkey.patch_all() import gevent from urllib.request import urlopen def ge ...
- 【定时任务】Spring Boot 中如何使用 Quartz
这篇文章将介绍如何在Spring Boot 中使用Quartz. 一.首先在 pom.xml 中添加 Quartz 依赖. <!-- quartz依赖 --> <dependency ...
- jQuery的data() 和 h5 的 dataset()
作用:获取自定义属性 命名规则:驼峰命名法 data-user==>user data-user-name==>userName 区别:jQuery:操作内存 h5: 操作DOM j ...
- PHP接入支付宝支付
创建应用 使用支付宝账号登录开放平台创建应用,应用创建成功之后可以得到APPID等相关信息 接着需要设置RSA密钥,可以使用蚂蚁金服开放平台提供的生成工具,生成完密钥需在开放平台中填写. 代码接入 引 ...
- 学会使用DNSPod,仅需三步
学会使用DNSPod,仅需三步 第一步:在DNSPod添加记录 1.访问 https://www.dnspod.cn网站,在DNSPod官网首页的右上角,有[注册],如下图所示,点击[注册]按钮 ...
- [leetcode trie]212. Word Search II
Given a 2D board and a list of words from the dictionary, find all words in the board. Each word mus ...
- 使用 Python 读取火狐的 cookies
这事本来是有个 browsercookie 库可以做的,但是初看它就有不少问题: 不能指定要使用的火狐 profile(后来发现可以指定数据库文件). 找不到 sessionstore.js 文件时会 ...