一段js的思考
写了很久JS,还以为这段代码可以正常输出,谁知道输出超乎我的形象:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function MSG(a,b,c,d){
this.a=a;
this.b=b;
this.c=c;
this.d=d;
this.e="喜欢";
var that=this; //方便私有函数haha()访问
this.say=function(){
console.log(haha());
}
this.ca=function(){
return that.c+this.e+this.d;
}
function haha(){
return this.a+",今年"+this.b+"岁;";
// return this.a+",今年"+this.b+"岁;"+this.ca();
// return that.a+",今年"+that.b+"岁;"+that.ca();
}
}
var my=new MSG('张三','25','男','美女');
my.say();
</script>
</head>
<body>
</body>
</html>

以下这段代码居然报错,呜呜呜呜呜。。。。。。。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function MSG(a,b,c,d){
this.a=a;
this.b=b;
this.c=c;
this.d=d;
this.e="喜欢";
var that=this; //方便私有函数haha()访问
this.say=function(){
console.log(haha());
}
this.ca=function(){
return that.c+this.e+this.d;
}
function haha(){
// return this.a+",今年"+this.b+"岁;";
return this.a+",今年"+this.b+"岁;"+this.ca();
// return that.a+",今年"+that.b+"岁;"+that.ca();
}
}
var my=new MSG('张三','25','男','美女');
my.say();
</script>
</head>
<body>
</body>
</html>
修改以上的代码,让that=this;此时that和this指向同一位置,就可以啦。。。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
function MSG(a,b,c,d){
this.a=a;
this.b=b;
this.c=c;
this.d=d;
this.e="喜欢";
var that=this; //方便私有函数haha()访问
this.say=function(){
console.log(haha());
}
this.ca=function(){
return that.c+this.e+this.d; //this==that
}
function haha(){
// return this.a+",今年"+this.b+"岁;";
// return this.a+",今年"+this.b+"岁;"+this.ca();
return that.a+",今年"+that.b+"岁;"+that.ca();
}
}
var my=new MSG('张三','25','男','美女');
my.say();
</script>
</head>
<body>
</body>
</html>

总结:
私有变量】 在对象内部使用'var'关键字来声明,而且它只能被私有函数和特权方法访问。
【私有方法】 在对象的构造函数里声明(或者是通过varfunctionName=function(){...}来定义),
它能被特权方法调用(包括对象的构造方法)和私有方法调用,私有函数只能访问私有的方法和属性。
【特权方法】通过this.methodName=function(){...}来声明而且可能被对象外部的代码调用。
它可以使用:this.特权函数() 方式来调用特权函数,使用 :私有函数()方式来调用私有函数。
【公共属性】 通过this.variableName来定义而且在对象外部是可以读写的。不能被私有函数所调用。
【公共方法】 通过ClassName.prototype.methodName=function(){...}来定义可以从对象外部来调用。
【原型属性】 通过ClassName.prototype.propertyName=someValue 来定义。
【静态属性】 通过ClassName.propertyName=someValue 来定义。
【静态方法】 通过ClassName.funName=function(){...} 来定义。
一段js的思考的更多相关文章
- 由一段JS代码引发的思考
不知道大家在编程的时候有没有遇到过这种情况,就是在循环遍历删除一部分内容的时候,发现只能删除其中一部分,而另一部分却总也删不掉,然后觉得自己的逻辑没有问题啊,于是陷入了深深的抑郁之中…… 昨天在处理一 ...
- 一段js MD5。加密 转换C#语法过程
A 帮忙把这段js脚本转换 c#语言. JS: function md5 (bit,sMessage) {debugger //var sMessage = this; function Rotate ...
- 让ie支持placeholder属性,一段js搞定
placeholder属性真的是超级好用的新属性,可惜,只有新版浏览器才支持,为了写出输入框贴心提示,老方法就是加span标签覆盖,营造出placeholder提示的感觉,现在安利一款好用的js,好用 ...
- 分享一段js,判断是否是在iPhone中的Safari浏览器打开的页面
头部引用jquery包 将下面的一段js写在</body>的前面 <script type="text/javascript"> var ua = navi ...
- 一段JS控制TD中图片的大小的代码
一段JS控制TD中图片的大小的代码 <table><tr><td id="otd"><div></div><img ...
- 一天一小段js代码(no.4)
最近在看网上的前端笔试题,借鉴别人的自己来试一下: 题目: 写一段脚本,实现:当页面上任意一个链接被点击的时候,alert出这个链接在页面上的顺序号,如第一个链接则alert(1), 依次类推. 有一 ...
- 一天一小段js代码(no.2)
(一)可以用下面js代码来检测弹出窗口是否被屏蔽: var blocked = false ; try { /*window.open()方法接受4个参数window.open(要加载的url,窗口目 ...
- 我要崩溃了,要解出这么一段js代码背后的东西,这真是一坨啊,别被高度欺骗了,他还有宽度!!!!!试着按下方向右键
一坨js代码: function s_gi(un, pg, ss) { var c = "s.version='H.26';s.an=s_an;s.logDebug=function(m){ ...
- 在使用IWMS的时候,IWMS自带函数样式无法满足我们需求。以下一段JS是实现左图右字的适用于IWMS的代码。
<div class="wz-list">里边需要有html做好的Html代码样式</div> <script> var attrnew = & ...
随机推荐
- centos7下vi的用法
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...
- python模块之xlrd,xlwt,读写execl(xls,xlsx)
安装xlrd,xlwt pip install xlrd xlwt xlrd读取execl [环境ipython python2.7.5] import xlrd book = xlrd.open_w ...
- go语言入门(三)
条件语句 go语言的条件语句结构如下: go语言的条件语句和其他语言类似.简单列举下: 1.if 语句,布尔表达式不需要括号 if 布尔表达式 { /* 在布尔表达式为 true 时执行 */ } 2 ...
- curl 发送请求的时候报错
AWS HTTP error: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see ...
- LeetCode解题报告—— Minimum Window Substring && Largest Rectangle in Histogram
1. Minimum Window Substring Given a string S and a string T, find the minimum window in S which will ...
- CTF中的EXP编写技巧 zio库的使用
zio库没有提供文档 这个是官方给出的一个例子程序 from zio import * io = zio('./buggy-server') # io = zio((pwn.server, 1337) ...
- gm(GraphicsMagick)图片中文水印乱码问题
1.GraphicsMagick图片中文水印乱码问题处理方式 如出现乱码是由于服务器中缺少中文字库所致,为避免系统中存在多个中文字库冲突, 所以没有必要在安装GraphicsMagick时就将字库文件 ...
- php正则判断手机号码的方法
导读: php用正则表达式判断手机号码的写法:从文章中匹配出所有的手机号就可以preg_match_all(),如果要检查用户输入的手机号是否正确可这样来检查:preg_match(). 用正则匹配手 ...
- 安装requests
requests包让Python程序能够轻松地向网站请求信息以及检查返回的响应.要安装requests,请执行类似于下面的命令: $ pip3 install --user requests http ...
- jquery 上传图片自由截取
为了使用户能自定义个人头像,需要提供一个对上传图片的截图功能,当前很多网站特别是SNS类网站都提供这样的功能,非常实用.本文主要是利用jQuery的imgAreaSelect插件实现. 首先引入三个文 ...