js构造函数的安全作用域用法详解

小试一下,总结如下

javascript是一个极其具有弹性的语言…

很多时候,js并不会像我们预期的那样执行.
js的构造函数就是用new操作一个函数,在使用new的时候,函数的this指针会指向当前对象的作用域.
 

 代码如下 复制代码
function Person(name,age,job){
         this.name=name;
         this.age=age;
         this.job=job;
}
var p=new Person("siren",24,"php");

上面这个例子 用new创建一个新的对象.该函数的this指针就会指向p的作用域.这样没有任何问题.
可是如果我们不用new创建对象呢?

 代码如下 复制代码
 
function Person(name,age,job){
         this.name=name;
         this.age=age;
         this.job=job;
}
var p=Person("siren",24,"php");
alert(window.name);  //siren
alert(window.age);   //24
alert(window.job);   //php

这个时候 p就是一个undefined;而 Person的this指针指向了window作用域.
为什么呢?
因为构造函数是作为普通函数调用的,忽略了new操作符.由于this对象的晚绑定,造成this被解析成window的对象.
这种问题就会造成window域的属性被覆盖.
那么如何解决?
其实在js里面也有一个与php相同的关键字 instanceof
它用来检查对象是否是某个实例

 代码如下 复制代码

function Person(name,age,job){
         if(this instanceof Person){
              this.name=name;
              this.age=age;
              this.job=job;
         }else{
               this=new Person(name,age,job);
         }
}
var p=Person("siren",24,"php");
alert(p.name);  //siren
alert(p.age);   //24
alert(p.job);   //php

时间: 2024-11-03 06:05:34

js构造函数的安全作用域用法详解的相关文章

js replace 与replaceall实例用法详解

这篇文章介绍了js replace 与replaceall实例用法详解,有需要的朋友可以参考一下   stringObj.replace(rgExp, replaceText) 参数 stringObj 必选项.要执行该替换的 String 对象或字符串文字.该字符串不会被 replace 方法修改. rgExp 必选项.为包含正则表达式模式或可用标志的正则表达式对象.也可以是 String 对象或文字.如果 rgExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找;不要尝试将字符串

js中 javascript:void(0) 用法详解_javascript技巧

javascript:void(0)表示不做任何动作.如: 复制代码 代码如下: <a href="javascript:void(0);" onclick="alert('ok');"></a>  这里表示这个链接不做跳转动作,执行onClick事件. 我想使用过ajax的都常见这样的代码: 复制代码 代码如下: <a href="javascript:doTest2();void(0);">here<

js中reverse函数的用法详解

 本篇文章主要是对js中reverse函数的用法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 reverse()方法用于颠倒数组中元素的顺序   注意:该方法会改变原来的数组,而不会创建新的数组.   例子:  var  str = ['1','2','3'];   document.write(a);   输出:3,2,1    

js replace 与replaceall实例用法详解_javascript技巧

stringObj.replace(rgExp, replaceText) 参数 stringObj 必选项.要执行该替换的 String 对象或字符串文字.该字符串不会被 replace 方法修改. rgExp 必选项.为包含正则表达式模式或可用标志的正则表达式对象.也可以是 String 对象或文字.如果 rgExp 不是正则表达式对象,它将被转换为字符串,并进行精确的查找;不要尝试将字符串转化为正则表达式. replaceText 必选项.是一个String 对象或字符串文字,对于stri

js中setTimeout的精度用法详解

前几天刚发了一篇利用setTimeout提高ui响应速度的文章,本来感觉自己对setTimeout的理解已经够深入了,但是昨天偶然听说setTimeout其实是有"bug"的:在setTimeout 0时,并不能精确定时,还说IE会有16ms的延时 虽然早就想到js这种东西定时肯定不会很精确的,而且这个时延对"提高ui响应速度"影响也不大,但是如果是做动画的话,影响可能就比较大了,还说抽空写了段小程序试了试  代码如下 复制代码 //定时长度 var OUT_TIM

js中reverse函数的用法详解_javascript技巧

reverse()方法用于颠倒数组中元素的顺序 注意:该方法会改变原来的数组,而不会创建新的数组. 例子: var  str = ['1','2','3']; document.write(a); 输出:3,2,1

JS手机触摸屏的事件用法详解

处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件: 一. touchstart:// 手指放到屏幕上的时候触发 touchmove:// 手指在屏幕上移动的时候触发 touchend:// 手指从屏幕上拿起的时候触发 touchcancel:// 系统取消touch事件的时候触发.至于系统什么时候会取消,不详 二. client / clientY:// 触摸点相对于浏览器窗口viewport的位置 pageX / pageY:// 触摸点相对于页面的位置 s

javascript jquery-jquery中getScript()的用法详解,从一个远程js文件中读取数据

问题描述 jquery中getScript()的用法详解,从一个远程js文件中读取数据 第一个html文件: <html> <head> <script type="text/javascript" src="jquery-2.1.3.js"></script> $.getScript("shuj.js",function(){alert("aaaaa");}) </hea

js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解_javascript技巧

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置. lastIndexOf() 方法可返回一个指定的字符串值最后出现的位置,在一个字符串中的指定位置从后向前搜索. substring() 方法用于提取字符串中介于两个指定下标之间的字符. substr(start,length)表示从start位置开始,截取length长度的字符串 split 将一个字符串分割为子字符串,然后将结果作为字符串数组返回 replace 用于在字符串中用一些字符替换另一些字符,或替换一个与正则