1.请看下列代码:

function F(){
function C(){
return this;
}
return C();
}
var o=new F();

请问上面的this值指向的是全局对象还是对象o?

答:全局对象。

function C(){
return this;
}

这里面this指向了全局对象,


在return C();时,调用C方法,返回了全局对象,
然后return了全局对象。
在new构造函数时,如果构造函数没有return语句,返回的是构造函数的this,如果有return语句,并且return的是一个对象,那么new出来的就是return的这个对象;如果return一个基本类型的对象,那么new出来还是构造函数的this。
所以在最后return C()的时候相当于return 全局对象,全局对象不是基本类型,所以o指向的全局对象。

2.下面代码的执行结果会是什么?

function C(){
this.a=1;
return false;
}
console.log(typeof new C());

跟上面这个题考点一样啊。。。
输出object

3.下面这段代码的执行结果又将是什么?

var c=[1,2,[1,2]];
c.sort();
c.join("--");
console.log(c);
  • 1
  • 2
  • 3
  • 4

答:[1,[1,2],2]
sort完以后数组变成这样,join方法不改变数组。
如果题目是

var c=[1,2,[1,2]];
c.sort();
c=c.join("-");
console.log(c);

最后输出join的结果,是 1-1,2-2


这个结果好有迷惑性,如果没想通仔细想一下,我是晕了会才发现就这样啊。。。

4.在String()构造函数不存在的情况下自定义一个MyString()的构造器函数。记住,由于String()不存在,因此您在写构造器函数时不能使用任何属于内建String对象的方法和属性。并且要让您所创建的对象通过以下测试:

var s = new MyString("hello");
s.length; //5 s[0]; //"h" s.toString(); //"hello" s.valueOf(); //"hello" s.charAt(1); //"e" s.charAt("2"); //"l" s.charAt("e"); //"h" s.concat(" world!"); //"hello world!" s.slice(1,3); //"el" s.slice(0,-1); //"hell" s.split("e"); //["h","llo"] s.split("l"); //["he","","o"]

如果您觉得这个练习很有趣,可以不用止步于join()方法,继续为其创建尽可能多的方法。

参考答案:

    function MyArray(){
this.length=arguments.length;
for(var i=0;i<this.length;i++){
this[i]=arguments[i];
} this.toString=function(){
var resultStr="";
for(var i=0;i<this.length;i++){
if(i===this.length-1){
resultStr+=this[i].toString();
}else{
resultStr+=this[i].toString()+",";
}
}
return resultStr;
};
this.push=function(obj){
this[this.length]=obj;
this.length++;
return this.length;
};
this.pop=function(){
if(this.length===0){
return null;
}
result=this[this.length-1];
this[this.length-1]=undefined;
this.length--;
return result;
};
this.join=function(str){
var resultStr="";
for(var i=0;i<this.length;i++){
if(i===this.length-1){
resultStr+=this[i].toString();
}else{
resultStr+=this[i].toString()+str;
}
}
return resultStr;
}
}

7.在Math对象不存在的情况下,创建一个类似的MyMath对象,并为其添加以下方法:
1)MyMath.rand(min,max,inclusive)-随机返回min到max区间中的一个数,inclusive为true时为闭区间(这也是默认情况)。
2)MyMath.min(array)-返回目标数组中的最小值。
3)MyMath.Max(array)-返回目标数组中的最大值。

参考答案:

    function MyMath(){

    }
MyMath.rand=function(min,max,inclusive){
if(typeof min!=="number"){
throw new Error("type error");
return;
}
if(typeof max!=="number"){
throw new Error("type error");
return;
}
if(min>max){
throw new Error("parameter error");
return;
}
if(typeof inclusive==="undefined"){
inclusive=true;
}else{
inclusive=!!inclusive;
}
if(inclusive){
if(Math.random()>0.5){
return min+(max-min)*Math.random();
}else{
return max-(max-min)*Math.random();
}
}else{
//不闭合区间,先排除0的可能
var randomNum=Math.random();
while(randomNum===0){
randomNum=Math.random();
}
return min+(max-min)*randomNum;
}
};
MyMath.min=function(){
if(arguments.length===0){
throw new Error("no parameter");
return;
}
var minValue;
var l=arguments.length;
for(var i=0;i<l;i++){
var param=arguments[i];
if(typeof param!=="number"){
throw new Error("parameter error");
return;
}
if(i===0){
minValue=param;
}
if(minValue>param){
minValue=param;
}
}
return minValue;
};
MyMath.max=function(){
if(arguments.length===0){
throw new Error("no parameter");
return;
}
var maxValue;
var l=arguments.length;
for(var i=0;i<l;i++){
var param=arguments[i];
if(typeof param!=="number"){
throw new Error("parameter error");
return;
}
if(i===0){
maxValue=param;
}
if(maxValue<param){
maxValue=param;
}
}
return maxValue;
};

javascript底层练习的更多相关文章

  1. 【探讨】javascript事件机制底层实现原理

    前言 又到了扯淡时间了,我最近在思考javascript事件机制底层的实现,但是暂时没有勇气去看chrome源码,所以今天我来猜测一把 我们今天来猜一猜,探讨探讨,javascript底层事件机制是如 ...

  2. JavaScript之自我总结篇

    最近在看汤姆大叔的"深入理解JavaScript系列",写得真的不错,对于我而言特别是12章到19章,因为大叔研究的点,就主要是从底层来研究JavaScript为什么会出现钟种特有 ...

  3. 看了汤姆大叔的“你真懂JavaScript吗?”的一些感慨

    看了汤姆大叔的“你真懂JavaScript吗?”,里面有5道题目,我都一一作了,然后在chrome的控制台里面运行了一遍,虽然只错了一道,但还是细细读了下答案,在此总结一下,看看是否对大家对这些Jav ...

  4. 真懂JavaScript吗

    你真懂JavaScript http://www.cnblogs.com/elegance/p/4195593.html 看了汤姆大叔的“你真懂JavaScript吗?”,里面有5道题目,我都一一作了 ...

  5. JavaScript 原型的深入指南

    摘要: 理解prototype. 原文:JavaScript 原型的深入指南 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 不学会怎么处理对象,你在 JavaScript 道路就就走 ...

  6. 浏览器UI多线程及JavaScript单线程运行机制的理解

    在上一篇博客中,我对jQuery的队列(queue)机制和动画(animate)机制做了一个深入的解析,在animate的实现机制其核心是依靠queue来完成的,其中在jQuery的链式调用部分,之前 ...

  7. 关于JavaScript的事件触发

    突然知道JavaScript底层是怎么实现事件触发的,找到一个博客,功力不够,看的很迷糊,记载这里吧,后面再研究. [探讨]javascript事件机制底层实现原理

  8. 如何学好javascript

    今天逛论坛时看到有朋友问,是否有专门教Javascript的学校,这里想想把自己的一点建议和自己3年来的前端Javascript开发的经验跟大家分享下,也给出几本个人认为不错的书来做为大家学习的参考资 ...

  9. js 的一些知识 摘自http://img0.pconline.com.cn/Pc_intranet/1105/13/313647_7.pdf

    Js 问题分析--js 影响页面性能现状分析:问题陈述分析问题:抽象问题根源,通过实例或推理证明问题的严重性问题引申:以现有问题为点开始扩散,这将导致其它什么问题,或同一类型的问题问题总结:从分散开始 ...

随机推荐

  1. ie 代理设置中地址和端口置灰的解决办法

    @echo offecho 代理设置reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings&quo ...

  2. &times变成x

    昨天晚上遇到一个很尴尬的bug. 当使用IE浏览器,跳转链接使用&传参的时候第二个参数是times,也就是&times(你有可能看到的是x,实际是&times),结果& ...

  3. redis 的部分配置

    linux 安装: yum install redis 修改redis配置: 配置文件位于/etc/redis.conf. 作为守护进程运行(默认no) # 默认情况下 redis 不是作为守护进程运 ...

  4. Matlab7.1——启动时只显示Logo

    1. 现象 Matlab7.1在启动时只显示Matlab的Logo: 2. 解决方法 听我的吧,这个是官方办法,我也亲自试过了1结束matlab进程:2在C:\user\APPDATA\Roaming ...

  5. bzoj4974: [Lydsy1708月赛]字符串大师

    脑洞题...玄学 假如是a[i]!=i,说明构成了循环节长为a[i]的循环,那就去%一下(别想多)看一下是循环节中的第几个咯. 否则新填的这个不能和前面构成任何循环,那就不停往前跳去把不能填的标记一下 ...

  6. HDU 1394 线段树or 树状数组~

    Minimum Inversion Number Description The inversion number of a given number sequence a1, a2, ..., an ...

  7. c# IP从192.168.1.1转成int类型

    找了一些资料,总结如下: 方法1 .net提供的方法转换IP地址 //字符串转换为数字 System.Net.IPAddress ipaddress = System.Net.IPAddress.Pa ...

  8. java静态方法和实例化方法的区别(copy)

    [资料来源] http://blog.csdn.net/biaobiaoqi/article/details/6732117 方法是我们每天都在写得,很多程序员大多都使用实例化方法,而很少使用静态方法 ...

  9. MQTT + apache-apollo服务器初学使用

    说明:MQTT是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通 ...

  10. bzoj 1827: [Usaco2010 Mar]gather 奶牛大集会【树形dp】

    不能用read会TLE!!不能用read会TLE!!不能用read会TLE!! 一开始以为要维护每个点,线段树写了好长(还T了-- 首先dfs一遍,求出点1为集会地点的答案,处理处val[u]为以1为 ...