避免使用 JS 特性 with(obj){}

1)简要说明  
       with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性。要给对象创建新的属性,必须明确地引用该对象。

2)语法格式  
with(object instance)  
{  
        //代码块  
}  
       有时候,我在一个程序代码中,多次需要使用某对象的属性或方法,照以前的写法,都是通过:对象.属性或者对象.方法这样的方式来分别获得该对象的属性和方法,着实有点麻烦,学习了with语句后,可以通过类似如下的方式来实现:  
with(objInstance)  
{  
       var str = 属性1;  
.....  
} 去除了多次写对象名的麻烦。

3)举例

<script language="javascript">
<!--
function Lakers() {
       this.name = "kobe bryant";
       this.age = "28";
       this.gender = "boy";
}
var people=new Lakers();
with(people)
{
       var str = "姓名: " + name + "<br>";
       str += "年龄:" + age + "<br>";
       str += "性别:" + gender;
       document.write(str);
}
//-->
</script>  

代码执行效果如下:  
姓名: kobe bryant  
年龄:28  
性别:boy

JavaScript提供了一个with语句,本意是想用它来快捷地访问对象的属性,不幸的是,它的结果可能有时不可预料,所以应该避免使用它

例如

with (obj) {

  a = b

}

它等于这些语句中的某一条,

a = b;

a = obj.b

obj.a = b

obj.b = obj.a

你无法辨别出得到的是这些语句中的哪一条,而且with本身严重影响了Javascript处理器的速度,它的本意是好的,但如果没有它,Javascript语言会更好一点。

时间: 2024-10-09 15:52:41

避免使用 JS 特性 with(obj){}的相关文章

js的call(obj,arg)学习笔记

var add=function (a,b){ return(a+b); } var sub=function (a,b,c){ return(a-b-c); } sub.call(add,1,2,3) //示例的意思时指用sub对象来替换add对象,并传入参数 //使用call来实现继承 function class1(){ this.name="lee"; this.say=function(){ console.log(this.name); } } function class

JS面向对象篇一、理解对象及属性特性(属性描述符)

本文内容 1.理解对象; 2.ECMAScript有两种属性类型:数据属性和访问器属性(getter和setter函数); 3.数据属性的属性特性:[[Configurable]].[[Enumerable]].[[Writable]].[[value]]; 4.访问器属性的属性特性:[[Configurable]].[[Enumerable]].[[get]].[[set]]; 5.Object.defineProperty().Object.defineProperties().Object

JS原型,Prototype,原型

对于javascript这样一种前端语言,个人觉得,要真正的理解其oop, 就必须要彻底搞清楚javascript的对象,原型链,作用域,闭包,以及this所引用的对象等概念.这些对弄明白了,应该就可以比较自信的驾驭这种语言了. 大家都知道,javascript中的继承不是使用的类继承的机制,而是使用的另一种方式 – 原型继承.在原型继承方式中,本质上是javascript语言加入原型链这种机制,从而实现了面向对象的重要特性之一 – 继承.在这篇博文中,基于个人的理解,来说说javascript

很强大的HTML+CSS+JS面试题(附带答案)

一.单项选择(165题) 1.HTML是什么意思? A)高级文本语言 B)超文本标记语言 C)扩展标记语言 D)图形化标记语言 2.浏览器针对于HTML文档起到了什么作用? A)浏览器用于创建HTML文档 B)浏览器用于查看HTML文档 C)浏览器用于修改HTML文档 D)浏览器用于删除HTML文档 3.默认情况下,使用P标记会形成什么效果? A)在文字P所在位置中加入8个空格 B)P后面的文字会变成粗体 C)开始新的一行 D)P后面的文字会变成斜体 4.哪个标记用于表示HTML文档的结束? A

总结的JS数据类型判定(非常全面)

用typeof 来检测数据类型 Javascript自带两套类型:基本数据类型(undefined,string,null,boolean,function,object)和对象类型. 但是如果尝试用typeof 来检测对象类型都一律返回"object"并不能加以区分 typeof null // "object" typeof [] // "object" typeof document.childNodes //"object&qu

ECMAScript6相关实用特性

本文总结ECMAScript6相关实用特性 目录 let和const 箭头函数 class 对象字段 模板字符串 解构赋值 函数参数扩展 迭代器for...of 模块加载 map和weakmap set和weakset 对象代理 Symbol数据类型 类型方法的扩展 Promise规范 let和const let 声明变量 const 声明常量 两者没有作用域提升 箭头函数 箭头函数不存在this调用模式的问题,函数在哪儿定义的this就是这个上下文 var fn = () => { conso

vue,js基础知识

Vue.js是一套构建用户界面(view)的MVVM框架.Vue.js的核心库只关注视图层,并且非常容易学习,非常容易与其他库或已有的项目整合. 1.1 Vue.js的目的 Vue.js的产生核心是为了解决如下三个问题: 解决数据绑定的问题: Vue.js框架生产的主要目的是为了开发大兴单页面应用(SPA:Single Page Application) Angular.js中对PC端支持的比较良好,但是对移动端支持就一般.而Vue.js主要支持移动端,也支持PC端. 3. 它还支持组件化.也就

JS运动组件, move.js

move.js function getStyle(obj, name){ return obj.currentStyle?obj.currentStyle[name]:getComputedStyle(obj, false)[name]; }; function move(obj, json, options){ options=options||{}; options.type=options.type||'buffer'; options.time=options.time||700; v

js JSON

1. 语法 JSON 的语法可以表示三种类型的值. 简单值 : 可以在 JSON 中表示字符串.数值.布尔值和 null,字符串必须用双引号. 对象 : 表示的是一组有序的键值对,对象的属性必须用双引号. 数组 : 数组的值也可以是任意类型--简单值.对象或数组. JSON 对象 JSON 对象有两上方法 stringify()         把 js 对象序列化为 JSON 字符串,如果值为undefined, 则删除对应的键值对. parse()              把 JOSN 字