qq空间好慢,把我的几个文章拿过来:
 
 
题目如下:
<script>
function foo(){
  foo.abc = function(){alert('def')}
  this.abc = function(){alert('xyz')}
  abc = function(){alert('@@@@@')};
  var abc = function(){alert('$$$$$$')}
}
foo.prototype.abc = function(){alert('456');}
foo.abc = function(){alert('123');}
var f = new foo();
f.abc();
foo.abc();
abc();
</script>
问题来自: 中国狐([url]www.foxjs.cn[/url]) 详细出处参考:[url]http://www.foxjs.cn/article.asp?id=607[/url]

我的分析结果----->
不运行看看什么结果,分析下
1.采用逐步扩展变量的方法分析:
看这个:
<script>
abc = function(){alert('@@@@@')};-----其实这里等价于window.abc=function(){alert('@@@@@')};一个赋值语句
abc();-----其实这里等价于window.abc();
</script>
结果肯定是@@@@@了。
2.放到函数里面赋值
<script>
function foo()
{
abc = function(){alert('@@@@@')};
}
abc();
</script>
在执行foo();之前是什么也不会输出的,因为还没有对abc赋值,也就是函数引用为null
如果这样,
<script>
function foo()
{
abc = function(){alert('@@@@@')};
}
foo();//函数执行了赋值语句
abc();
</script>
就会输出@@@@@了。
3.看看构造函数
function foo()
{
this.abc = function(){alert('xyz')}------有了this就成为了构造函数
abc = function(){alert('@@@@@')};--window.abc
}
foo();//产生一个匿名对象?然后销毁?
abc();
</script>
上面只是当作了普通的函数执行了赋值语句。
结果:@@@@@
再看如下:
<script>
function foo()
{
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
}
var f=new foo();
f.abc();---this指向了f
abc();---window.abc()
</script>
结果:xyz   @@@@@

再看
<script>
function foo()
{
foo.abc=function(){alert('def');};---对比下window.abc=function{alert('def');};
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
}
var f=new foo();
f.abc();
foo.abc();---这里类似window.abc();
abc();
</script>
结果:xyz   def   @@@@@
4.
<script>
function foo()
{
foo.abc=function(){alert('def');};
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')}--添加了个局部作用域的abc在foo()函数内部会覆盖
---例如在这里调用abc()会执行局部的函数
}
var f=new foo();
f.abc();
foo.abc();
abc();
</script>
结果和上面的相同。
看下面的:
<script>
foo.abc = function(){alert('123');}---在调用new foo()之前赋值会在后面被重写
function foo()
{
foo.abc=function(){alert('def');};
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')}
}
var f=new foo();
f.abc();
foo.abc();
abc();
</script>
结果还是一样。
function foo()
{
foo.abc=function(){alert('def');};
this.abc = function(){alert('xyz')}
abc = function(){alert('@@@@@')};
var abc = function(){alert('$$$$$$')}
}
var f=new foo();
foo.abc = function(){alert('123');}---但是在new foo()调用之后,而foo.adb()调用之前重写函数,结果受影响
f.abc();
foo.abc();
abc();
</script>
结果:xyz  123  @@@@@
5.原型对象prototype
<script>
function foo()
{
}
foo.prototype.abc = function(){alert('456');}
var f=new foo();
f.abc();
</script>
结果:456
虽然foo()内部没有明确的定义方法abc()但是我们发现好像foo类定义了一个abc()方法似的。---等于我们为foo类的父类添加了一个可继承的方法
下面重写方法覆盖父类中的方法
<script>
function foo()
{
this.abc = function(){alert('xyz')}
}
foo.prototype.abc = function(){alert('456');}
var f=new foo();
f.abc();
</script>
结果:xyz

转载于:https://blog.51cto.com/xcf007/101048

我对一个js问题的分析相关推荐

  1. JS加密算法简单分析

    这次分析百度音乐的评论请求的加密,首先先看包 看到有两个地方1. param,2. sign,基本可以断定sign是用的MD5加密的 那么我们从html页面分析入手,恰巧看到html代码中有写到这么一 ...

  2. 构建meteor应用程序_我如何在一个月内构建一个复杂的文本分析应用程序

    构建meteor应用程序 by Jeffrey Flynt 由Jeffrey Flynt 我如何在一个月内构建一个复杂的文本分析应用程序 (How I built a complex text ana ...

  3. 基于SSH2做一个24小时订单分析表格

    基于SSH2做一个24小时订单分析表格 以下为要实现的最终效果截图: ps:没有时间优化前段页面样式,对前段美化有要求的小伙伴可以自行引用BOOtStrap.esayUi 或者 layUi 自行优化. ...

  4. 移动端开发基本知识之touch.js,FastClick.js源码分析

    问题1:300ms延迟问题指的是? 不管在移动端还是PC端,我们都需要处理用户点击,这个最常用的事件.但在touch端click事件响应速度会比较慢,在较老的手机设备上会更为明显(300ms的延迟). ...

  5. 淘淘商城第103讲——js跨域分析

    通过前几讲的学习,我有理由相信大家都写完了用户登录这个接口,登录的时候我们把token写入到了Cookie当中,登录成功后,我们查看Cookie的信息,如下图所示,发现是有token信息的. 我们回到 ...

  6. video.js 源码分析(JavaScript)

    video.js 源码分析(JavaScript) 组织结构 继承关系 运行机制 插件的运行机制 插件的定义 插件的运行 控制条是如何运行的 UI与JavaScript对象的衔接 类的挂载方式 存储 ...

  7. impress.js 源码分析

    impress.js 源码分析   之前做展示用幻灯片,我一直热衷于使用PPT,刚开始学习PPT时总是强行使用各种页面特效,越做越复杂.现在看来,学技术大概都要经历一个从简到繁再到简的过程吧.后来,无 ...

  8. 从恶意软件获得的新姿势——通过rundll32.exe执行js原理详细分析

    今年7月份,国外研究机构发现了一个比较新型的恶意软件,这个恶意软件不会在系统上安装任何文件,而是藏身在windows的注册表中通过rundll32.exe执行JavaScript代码. 听上去确实很有 ...

  9. html如何打包压缩,所有css打包压缩到一个js里面

    所有css打包压缩到一个js里面 打包css文件的意义:最终把css文件压缩到最终生成的js文件里,页面不需要再加载css文件,并且是压缩过的 打包css文件,安装style-loader css-l ...

最新文章

  1. 高并发之存储篇:关注下索引原理和优化吧!躲得过实践,躲不过面试官!
  2. stm32l0的停止模式怎么唤醒_探索者 STM32F407 开发板资料连载第二十二章 待机唤醒实验
  3. Silverlight运行原理经典问答。
  4. 【图像分割】图像分割专栏栏主自述:分割,我们究竟在研究什么?
  5. 3.Factory Method 工厂方法模式(创建型模式)
  6. for循环执行次数_VB考试笔记之循环控制结构部分
  7. (软件工程复习核心重点)第四章总体设计-第一节:总体设计基本概念和设计过程
  8. 万能搜索监控ip工具_录像机搜不到摄像头IP可能是以下原因
  9. Linux按照行数、大小切分文件
  10. https报文 完整_报文 HTTP HTTPS
  11. 图像特征原理--HOG特征
  12. 求解会议安排问题A - RJ501求解会议安排问题
  13. android+nfc+公交卡,Android NFC 读取公交卡信息Demo
  14. MS SQL基本语法及实例操作
  15. linux篇【12】:网络套接字<前序>—网络基础+udp套接字
  16. 【视频】海康威视摄像头RTSP协议格式
  17. 科创板发行上市审核25个监管案例汇编
  18. 《C语言小程序篇---1》——实现一个“富婆通讯录“(超详细)
  19. 把Safari整个页面翻译成中文,,
  20. 洛谷刷题笔记 整理药名

热门文章

  1. C# HttpClient设置cookies的两种办法
  2. Java虚拟机10:类加载器
  3. HDU 1867 KMP
  4. 格密码教程(三):基础域概念,体积等;阿达马不等式,行列式
  5. 鸿蒙霸榜 GitHub,从最初的 Plan B 到“取代 Android”?
  6. 复旦博士用130行代码搞定核酸统计,2分钟解决人工一小时工作量
  7. 从头到尾再讲一遍ThreadLocal
  8. “因为你不懂技术…” 警察:???
  9. 聊聊自己的高效学习方法~
  10. MiniDao_1.6.4 版本发布,轻量级Java持久化框架,Hibernate项目辅助利器