js开发积累

简介: 一、在js中遍历数组与其他语言的不同之处   for(var x in myvars){     alert(myvars[x]);//注意访问的方式不同 x才是数组下标 0,.... }   其他语言遍历类似这样的:   foreach(数组名 as 键名->值)   or ...

一、在js中遍历数组与其他语言的不同之处

 

for(var x in myvars){

 

  alert(myvars[x]);//注意访问的方式不同 x才是数组下标 0,....

}

 

其他语言遍历类似这样的:

 

foreach(数组名 as 键名->值)

 

or

 

foreach (数组名 as 值)

 

二、js定义类以及其成员的方式

 

 

<script>
var Class = {
    create: function() {
        return 5;
    }
}

 


var RevealTrans = Class.create();//调用该函数的方式有点特别。做个记号
alert(RevealTrans);//返回5
</script>

 

 

函数的两种不同使用形式:前面new 关键字与 没有 new

 

关键概念:

1.js中的函数与类都是同一个东西。因为没有类,类就是使用函数进行模拟实现其他语言类的方式

 

2.JS中的所有function都是一样的,但是用途可能是不同的(用作构造对象抑或是执行一个过程)。
使用new就是将函数模拟成类进行使用。不是有new,就相当于执行了该函数。
ClassName就是一个函数,当出现在new后面的时候就作为一个构造函数来构造对象。

 

3.在方法外部添加新变量
var Class = {
    create: function() {
        return function() {
            this.initialize.apply(this , arguments);
        }
    }
}
var A = Class.create();//构造个一个function复制给A
//A是一个function(),那么A. prototype,就是function中的一个变量 所以A.prototype表示在方法中添加一个新变量
//该变量其实就是一个对象,该对象里面定义什么方法 那么function产生的对象就拥有什么方法。模型是大概的东西,可以以后变化的。很好理解这里使用模型。
A.prototype={
    initialize:function(v){
        this .value=v;
    }
    showValue:function(){
        alert(this.value);
    }
}

///////////////////////////////////////////
var A = Class.create();等价于如下代码:


var A = function() {
            this.initialize.apply(this , arguments);
        }
测试后,上面这样使用也是可行的。只是考虑到代码扩展性,就使用了Class.create()

///////////////////////////////////////////

 


A.prototype = {
initialize:function(v){
        this .value=v;
    }

}
就相当于对A增加一些方法了 执行上面代码后,A对象的结果改变后,等价于:

 

////////////////////////////////////

A.prototype = {

   function() {
            this.initialize.apply(this , arguments);
        }//在原来基础上的
  initialize:function(v){
        this.value=v;
    }

}

通俗地理解是:针对A对象增加了一个方法——initialize()


///////////////////////////////////

由于js中将所有的东西都看成对象。那么下面这样使用就不奇怪了:

var a = new A("hello world");

 

 

 

 

arguments参数:


function test()
{
   
alert(arguments[0]);   
}

test("abc");//返回abc
所有传递给函数的参数都隐式地保存在arguments数组中 调用格式是:当前正在执行的对象.arguments[n]


可以这样理解:
///////////////////////
arguments[0]等价于:
test.arguments[0].
在使用的时候为什么不能这样用:

alert(this.arguments[0]);//报错:未定义   
/////////////////////////


call和apply总结:
说明白一点其实就是更改对象的内部指针,即改变对象的this指向的内容。
call函数和apply方法的第一个参数都是要传入给当前对象的对象,及函数内部的this。后面的参数都是传递给当前对象的参数。

格式:

要继承的对象.call(当前对象); 通俗理解:当前什么对象继承"要继承的对象"

 

例子:
function parent(){
this.a="a";
this.b="b";
}
function child(){
parent.call(this);//把this指向的内容替换成parent中this指向的内容。就是实现指针替换。
}
var c = new child();
alert(c.a); //c.a可以看成去访问parent方法里面的this了。因为child方法中有call方法
    alert(c.b);

个人理解:js中没有类的概念。所有东西都是对象。所有就无法像其他语言一样,可以使用extends实现类继承。js的call和apply方法可以实现继承的功能

 

 

 

 

 

概念总结:

js将所有东西都看成是对象。函数是对象的一种形式。函数也看成是一种变量。

可以只输出函数名,而不写函数后面的括号(),实现调用。在一本ajax_IBM书中就提到:
onreadystatechange=updatePage;//这里使用updatePage就可以完成对函数updatePage()进行调用。

原因是什么,书上说大致意思是:因为js是一种弱类型的语言。这就意味着,可以用变量引用任何东西。JavaScript 也将该函数名看作是一个变量。

 

关于弱类型语言的整体思考:

php也是一门弱类型的语言。在调用类的时候。类名大小写是没关系的。比如,类名是Page,而使用 new page也是能够生效的。联想到在php手册中提到一个意思,大致是:函数名不区分大小写的。也就是调用函数的时候,大小写之间的区别是不会影响使用的。

是不是可以这样理解:一般弱类型语言方法有没有括号不会受到影响。大小写只差也不会导致出错呢?

 

 

 

 

 

 

 

目录
相关文章
|
1月前
|
开发框架 JavaScript 安全
js开发:请解释什么是Express框架,以及它在项目中的作用。
Express是Node.js的Web开发框架,简化路由管理,支持HTTP请求处理。它采用中间件系统增强功能,如日志和错误处理,集成多种模板引擎(EJS、Jade、Pug)用于HTML渲染,并提供安全中间件提升应用安全性。其可扩展性允许选用合适插件扩展功能,加速开发进程。
|
1月前
|
缓存 JavaScript 数据安全/隐私保护
js开发:请解释什么是ES6的Proxy,以及它的用途。
`ES6`的`Proxy`对象用于创建一个代理,能拦截并自定义目标对象的访问和操作,应用于数据绑定、访问控制、函数调用的拦截与修改以及异步操作处理。
17 3
|
1月前
|
JavaScript
js开发:请解释什么是ES6的类(class),并说明它与传统构造函数的区别。
ES6的类提供了一种更简洁的面向对象编程方式,对比传统的构造函数,具有更好的可读性和可维护性。类使用`class`定义,`constructor`定义构造方法,`extends`实现继承,并可直接定义静态方法。示例展示了如何创建`Person`类、`Student`子类以及它们的方法调用。
22 2
|
1月前
|
自然语言处理 JavaScript 网络架构
js开发:请解释什么是ES6的箭头函数,以及它与传统函数的区别。
ES6的箭头函数以`=&gt;`定义,简化了函数写法,具有简洁语法和词法作用域的`this`。它无`arguments`对象,不能用作构造函数,不支持`Generator`,且不改变`this`、`super`、`new.target`绑定。适用于简短表达式,常用于异步编程和高阶函数。
18 5
|
1天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
11 3
|
1天前
|
JavaScript 前端开发
js开发:请解释什么是ES6的Generator函数,以及它的用途。
ES6的Generator函数是暂停/恢复功能的特殊函数,利用yield返回多个值,适用于异步编程和流处理,解决了回调地狱问题。例如,一个简单的Generator函数可以这样表示: ```javascript function* generator() { yield &#39;Hello&#39;; yield &#39;World&#39;; } ``` 创建实例后,通过`.next()`逐次输出&quot;Hello&quot;和&quot;World&quot;,展示其暂停和恢复的特性。
9 0
|
1天前
|
缓存 JavaScript 前端开发
js开发:请解释什么是Webpack,以及它在项目中的作用。
Webpack是开源的JavaScript模块打包器,用于前端项目构建,整合并优化JavaScript、CSS、图片等资源。它实现模块打包、代码分割以提升加载速度,同时进行资源优化和缓存。Webpack的插件机制可扩展功能,支持热更新以加速开发流程。
11 2
|
2天前
|
JavaScript 前端开发
js开发:请解释事件冒泡和事件捕获。
JavaScript中的事件处理有冒泡和捕获两种方式。事件冒泡是从子元素向上级元素传递,而事件捕获则从外层元素向内层传递。`addEventListener`的第三个参数可设定事件模式,`false`或不设为冒泡,`true`为捕获。示例代码展示了如何设置。
17 2
|
2天前
|
JavaScript 前端开发
js开发:请解释this关键字在JavaScript中的用法。
【4月更文挑战第23天】JavaScript的this关键字根据执行环境指向不同对象:全局中指向全局对象(如window),普通函数中默认指向全局对象,作为方法调用时指向调用对象;构造函数中指向新实例,箭头函数继承所在上下文的this。可通过call、apply、bind方法显式改变this指向。
7 1
|
2天前
|
JavaScript 前端开发
js开发:请解释同步和异步编程的区别。
同步编程按顺序执行,易阻塞;异步编程不阻塞,提高效率。同步适合简单操作,异步适合并发场景。示例展示了JavaScript中同步和异步函数的使用。
12 0