作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们.这里说明一点,__proto__属性的两边是各由两个下划线构成(这里为了方便大家看清,在两下划线之间加入了一个空格:_ _proto_ _).   现在正式开始!让我们从如下一个简单的例子展开讨论,并配以相关的图帮助理解: function Foo() {...};let f1 = new…
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: var num = new Number(); for(var pro in num) { console.log("num." + pro + " = "…
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: 1 2 3 4 var num = new Number(); for(var pro in num) {     console.log("num." + pro + &q…
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: 1 2 3 4 var num = new Number(); for(var pro in num) {     console.log("num." + pro + &q…
昨天在写文章(转载)的时候发现了有些对象的方法是分可枚举性和不可枚举性的.简单的查了一下资料,今天来捋一捋啥是对象的可枚举啥是不可枚举. 可枚举性: 对象的每一个属性都有一个描述对象,用来描述和控制该属性的行为,用Object.getOwnPropertyDescriptor方法来获取该描述对象(用Object.defineProperty方法来设置). 然后这个Object.defineProperty的方法不是vue双向数据绑定的原理吗!!下次再说…描述对象的enumerable属性,称为”…
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. 一.怎么判断属性是否可枚举 js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等,如果你写出这样的代码遍历其中的属性: 1 2 3 4 var num = new Number(); for(var pro in num) {     console.log("num." + pro + &q…
在C#中,有时候我们需要读取枚举值的描述属性,也就是说这个枚举值代表了什么意思.比如本文中枚举值 Chinese ,我们希望知道它代表意思的说明(即“中文”). 有下面的枚举: 1 2 3 4 5 6 public enum EnumLanugage {     [System.ComponentModel.Description("中文")]     Chinese,     English } 我们要获取的就是 Chinese 中的说明文字“中文”. 1 2 3 4 5 6 7 8…
一.'表亲戚':attribute和property 为什么称attribute和property为'表亲戚'呢?因为他们既有共同处,也有不同点. attribute 是 dom 元素在文档中作为 html 标签拥有的属性: property 是 dom 元素在 js 中作为对象拥有的属性. 从定义上可以看出: 对于 html 的标准属性来说,attribute 和 property 是同步的,是会自动更新的 但是对于自定义的属性来说,他们是不同步的.(自定义属性不会自动添加到property)…
一.静态方法与实例方法的例子: 我们先来看一个例子来看一下JS中的静态方法和实例方法到底是什么? 静态方法: function A(){} A.col='red'  //静态属性 A.sayMeS=function(){ console.log("Hello World S!"); } A.sayMeS();//输出Hello World S! 实例方法: function A(){ this.Color="yellow"  //实例属性 } A.prototype…
构造函数与原型对象的同名属性,实例会取哪一个? 看了下面的过程,再回忆JS高程3里关于这部分的示意图.实例my在new的时候,本身就获得了a属性,所以my.a是1,倘若在new的时候如果没有赋予a属性,则会从原型上搜索a属性,my.a是2.为什么有这个问题?因为在研究ES6和React中this的时候,碰到了这个易出错的地方. function A() { this.a = 1; //注释掉这句就从原型上获取了 } A.prototype.a = 2; var my = new A(); con…
<script type="text/javascript"> var obj = { attribute:1, method:function() { alert("我是函数"); } } for (var i in obj){ alert(i); // 输出属性名: attribute,method alert(obj[i]) // 输出属性的值:1和函数的内容 alert(obj["method"]);// 输出指定的值:如果只…
<script th:inline="javascript"> /*<![CDATA[*/ [[#{message1}]] [[${abc}]] /*]]>*/ </script>…
js中 给json对象添加新的属性 比如现在有一个json对象为jsonObj,需要给这个对象添加新的属性newParam,同时给newParam赋值为pre.做法如下: var obj={ "name":“wqc”, "age":22, "number":22 } obj.class=201; 新的属性添加以后,json对象变成: var jsonObj={ "name":“wqc”,    "age":…
前言:本文主要比较for.for-in.forEach和for-of的异同以及优缺点. for for循环是最原始最易理解的循环遍历方式 for(var index = 0;index < arr.length;index++){ console.log(arr[index]) } 使用continue和break可以跳出本次循环和退出循环 forEach 上述for循环的写法比较繁琐,因此数组提供了内置的forEach方法 arr.forEach((item, index) => { con…
前言我前面的文章,写过js中“类”与继承的一些文章.ES5我们可以通过 构造函数 或者 Object.create()等方式来模拟出js中的“类”,当然,对象呢是类的实例化,我们可以通过如下方式创建对象:var haorooms ={};或者var haorooms = new Object()今天主要总结一下Object的一些常用方法.Object.assign()1.可以用作对象的复制var obj = { a: 1 };var copy = Object.assign({}, obj);c…
我们都知道在js中普通类型的变量是没有属性和方法的,然后有时却并不是这样. var str = "努力,奋斗"; console.log(str.length); var num = 10; console.log(typeof num.toString()); //string 为什么会这样?因为一旦我们在普通类型的变量中使用了属性或者方法,js就会自动new一个对应的对象. var str = "努力,奋斗"; console.log(str = new Str…
此篇文章主要是提炼<JavaScript高级程序设计>中第六章的一些内容. 一:JS中OOP相关的概念 开始之前先总结JS中OOP相关的一些概念: 构造函数:JS中的构造函数就是普通的函数,当JS中的函数使用new调用时,这个函数就是构造函数.构造函数调用与普通函数调用相比会有以下两点不同: ① 在进入构造函数时,会先创建一个对象,并将构造函数的作用域赋值给这个对象(this指向这个对象) ② 在退出构造函数前,会默认返回创建的对象(返回this) 原型对象:每个函数都会有一个prototyp…
Function是函数的原型,所有的函数都来源于Function,获得函数的方法有两种类型,分为动态函数和函数继承. 动态函数 创建一个Function语法: var func = new Function(arg1, arg2, ..., argN, 函数体); var str = "var x = 5; for(var i = 0; i < 10; i++) { alert(x+i); }"; var func = new Function(str); 调用:func();…
在JS中,经常会遇到明明知道一个对象有某个属性或方法,可是又不知道怎么写的情况.下面,我就罗列了一些JS中常用的内置对象的属性和方法. Math对象: Math对象的作用是执行常见的算术任务. 首先Math属性中最常用的属性就是PI了,我们一般用Math.PI来调用它.在控制台中输出它的值为3.141592653589793,也就是圆周率.Math对象的常用的属性主要就是PI了,其他的用的比较少,如果用的时候直接查手册就好了. 然后就要说说它的方法了,Math的内置对象还是挺多的,不过都比较简单…
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们.这里说明一点,__proto__属性的两边是各由两个下划线构成(这里为了方便大家看清,在两下划线之间加入了一个空格:_ _proto_ _),本文基于谷歌浏览器(版本 72.0.3626.121)的实验结果所得.   现在正式开始! 让我们从如下一个简单的例子展开讨论,并配以相关的图帮助理解…
函数 函数就是重复执行的代码片.   函数定义与执行 <script type="text/javascript">     // 函数定义     function fnAlert(){         alert('hello!');     }     // 函数执行     fnAlert(); </script> 可以先调用再定义 即预解析(第一遍不执行,第二遍执行)   函数'return'关键字 函数中'return'关键字的作用:     1.返…
js中数据类型包含基本数据类型和引用类型,基本类型包括:string.null.undefined.number.boolean.引用类型即是对象比如:array  .function以及自定义对象等等. 在js中我们可以给引用类型动态添加属性: var myObj=new Object(); myObj.name='tom'; console.log(myObj.name); 输出: 也就是说我们可以动态给引用类型添加属性.那基本类型呢? 我们可以动态给他们添加属性,虽然不报错但是当我们调用的…
编程语言都是同样的,JS中也是有变量的.首先JS的变量是区分大写和小写的,这个须要注意.比方number和Number是不同的变量.无论是经常使用类型的,还是对象类型,比方 Object obj和Object Obj是两个对象.然后是对变量赋值.这个基本都一样,能够先声明再赋值, var i; i=0; 也能够声明时赋值, var i=2; 而变量假设你不又一次赋值,它是不会改变的,比方 var i=2. var i; 由于i没有又一次赋值.所以i还是2.而对于对象变量则比較有意思,不须要向那些…
在php,C++中都有命名空间的概念,命名空间主要是用来解决引入文件存在函数,类,变量重名的问题,在node.js中,没有命名空间这么复杂的概念,在node中,有模块的概念,也就是将功能性的代码都放在一起.然后引入,在本文件中使用.这种不会出现函数名,变量重名问题,在引入的模块中,都是以导入的方式注册的.看下面的例子: //circle.js var pi = 3.14; //计算圆的周长 exports.circle = function(r) { return 2 * pi * r; } /…
1.前言 作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们.这里说明一点,__proto__属性的两边是各由两个下划线构成(这里为了方便大家看清,在两下划线之间加入了一个空格:_ _proto_ _),实际上,该属性在ES标准定义中的名字应该是[[Prototype]],具体实现是由浏览器代理自己实现,谷歌浏览器的实现就是将[[Protot…
js中clientWidth, scrollWidth, innerWidth, outerWidth,offsetWidth的属性汇总,测试浏览器:ie7~ie11.chrome 和 firefox等. 一.测试1:无滚动条时,dom对象的offsetWidth.clientWidth和scrollWidth (1)测试代码 <!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta charset=&q…
作为一名前端工程师,必须搞懂JS中的prototype.__proto__与constructor属性,相信很多初学者对这些属性存在许多困惑,容易把它们混淆,本文旨在帮助大家理清它们之间的关系并彻底搞懂它们.这里说明一点,__proto__属性的两边是各由两个下划线构成(这里为了方便大家看清,在两下划线之间加入了一个空格:_ _proto_ _),本文基于谷歌浏览器(版本 72.0.3626.121)的实验结果所得.   现在正式开始! 让我们从如下一个简单的例子展开讨论,并配以相关的图帮助理解…
在js中如何复制一个对象,例如如下一个js对象. 如果知道这个对象的所有属性自然就可以重新new一个,然后对每个属性赋值,就可以做到,但如果不知道呢?如何创建一个内容相同 的对象呢? var obj={ colkey: "col", colsinfo: "NameList" } 最简单就是使用for in, 例如obj2就拥有了和obj完全相同的属性 var obj2=new Object(); for(var p in obj) { var name=p;//属性…
在JavaScript中,对象的属性分为可枚举和不可枚举之分,它们是由属性的enumerable值决定的.可枚举性决定了这个属性能否被for…in查找遍历到. js中基本包装类型的原型属性是不可枚举的,如Object, Array, Number等 1. for…in循环可以枚举(遍历)出对象本身具有的属性,通过Object.defineProperty()方法加的可枚举属性,或者通过原型对象绑定的可以枚举属性. 2. Object.keys()方法可以枚举对象本身的属性和通过Object.de…
ES中没有类的概念,这也使其对象和其他语言中的对象有所不同,ES中定义对象为:“无序属性的集合,其属性包含基本值.对象或者函数”.现在常用的创建单个对象的方法为对象字面量形式.在常见多个对象时,使用工程模式的一种变体. 1.理解对象 1)对象的属性分两种:数据属性和访问器属性,每个类型的属性都具有相应的特性. 数据属性:包含一个数据值的访问位置,在这个位置可以读取和写入数据.其包含四种特性:[[Configurable]].[[Enumerable]].[[Writable]].[[Value]…