JS语法:


JS知识点一览图

JS知识点一览图

在function中写this,在本function中可以显示,写Person则显示undefined.
在function中写Person,在function外可以显示,写this则显示undefined.
var name;
var age;
var info;
function Person(name,age){
this.name=name;
Person.age=age;
this.info=function(){
document.writeln("name is:"+this.name+"<br/>");
document.writeln("age is:"+this.age+"<br/>");
};
}
var p=new Person('chen',22);
p.info();
document.writeln("w-name is:"+this.name+"<br/>");
document.writeln("w-age is:"+Person.age+"<br/>");
用call方法遍历数组:
var each=function(array,fn){
for(var index in array){
fn.call(window,index,array[index]);
}
}
each([4,20,3],function(index,ele){
document.write("第"+index+"个元素是:"+ele+"<br/>");
});
全局变量在函数里用this取不到,要用window调用。
    var scope="全局变量" ;

    function test(){

        document.writeln(scope+"<br/>");
document.writeln(window.scope+"<br/>");
var scope="局部变量";
document.writeln(scope+"<br/>");
}
test();
如果定义的函数没有明确赋值给某个对象,则用window调用 。
var hello=function(name){
document.write(name+"say:hello<br/>");
}
window.hello("chen");
继承
function Base(){
this.member="em";
this.method=function(){
window.alert(this.member);
}
}
function extend(){
Base.call(this);
window.alert(member);
window.alert(this.method);
}
extend();
继承进阶:输出的是Cat,执行的是Animal里的showName。
function Animal(){
this.name='Animal';
this.title='AnimalTitle';
this.showName=function(){
alert(this.name);
}
}
function Cat(){
this.name='Cat';
this.showName=function(){
alert('cat'+this.name);
}
}
var animal=new Animal();
var cat=new Cat();
animal.showName.call(cat);
cat.title='catTitle';
console.log(cat.title);
call() 和 apply()的区别:

call方法调用时,必须在括号中详细地列出每个参数,参数可以是任意类型(参数不限数量)。 apply方法调用时,可在括号中以arguments 或 数组 来代表所有参数(参数只能有两个)。

它们各自的定义:

    apply:应用某一对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。

    call:调用一个对象的一个方法,以另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。

  它们的共同之处:

    都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象”。

  它们的不同之处:

    apply:最多只能有两个参数——新this对象和一个数组argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里。如果argArray不是一个有效的数组或arguments对象,那么将导致一个TypeError。如果没有提供argArray和thisObj任何一个参数,那么Global对象将被用作thisObj,并且无法被传递任何参数。

    call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。这个方法主要用在js对象各方法相互调用的时候,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。

    实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。

prototype.constructor:

a) Prototype:每一个函数都包含一个prototype属性,这个属性指向的是一个对象的引用;而对已每一个函数(类)的实例都会从prototype属性指向的对象上继承属性,换句话说通过同一个函数创建的所有对象都继承一个相同的对象。

b) 通过new 关键字和构造函数创建的对象的原型,就是构造函数的prototype指向的那个对象

每一个函数的Prototype属性指向的对象都包含唯一一个不可枚举属性constructor,它指向了它所在的构造函数。

arguments

在JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。arguments非常类似Array,但实际上又不是一个Array实例。

innerHTML

用来获取对象的内容(还可以向对象插入内容) 这里输出的是Firstname、Lastname。

<script type="text/javascript">
function getInnerHTML(){
alert(document.getElementById("tr1").innerHTML);
}
</script>
<table border="1" id="t1">
<tr id="tr1">
<th>Firstname</th>
<th>Lastname</th>
</tr>
<tr id="tr2">
<td>Peter</td>
<td>Griffin</td>
</tr>
</table>
<br />
<input type="button" onclick="getInnerHTML()"
value="Alert innerHTML of table row" />
遍历对象的属性
function Person(name,age){
this.name=name;
this.age=age;
this.info=function(){
alert('info method');
}
}
var p=new Person('chen',22);
for(a in p){
document.writeln(p[a]);
}
prototype
function Person(name,age){
this.name=name;
this.age=age;
this.info=function(){
document.writeln(this.name);
document.writeln(this.age);
}
}
var p1=new Person('chen',22);
p1.info();
Person.prototype.walk=function(){
document.writeln(this.name+'walk...');
}
var p2=new Person('zhi',23);
p2.info();
p2.walk();// zhiwalk...
p1.walk();// chenwalk...

用这句话把walk方法嵌进去,这样Person类就有了walk方法,并且p1也能调用了。而且不污染代码。

Person.prototype.walk=function(){
document.writeln(this.name+'walk...');
}

并不是建立一个新类,是对原类进行修改。所以称为伪继承。既可以扩展自定义类,也可以扩展JS内部对象。

JS语法学习笔记的更多相关文章

  1. Mustache.js语法学习笔记

    原文地址:http://www.cnblogs.com/flypig88/archive/2012/05/14/2497780.html 看了Mustache的github,学学其中的语法,做个笔记 ...

  2. JS语法学习笔记-菜鸟教程

    现在只需要<script></script>标签 javascript通常做法是放在<head>部分中,或者放在页面底部,这样可以把他们安置在同一位置,不会干扰页面 ...

  3. js再学习笔记

    #js再学习笔记 ##基本 1.js严格区分大小写   2.js末尾的分号可加,也可不加   3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...

  4. 毕业设计 之 五 PHP语法学习笔记

    毕业设计 之 四 PHP语法学习笔记 作者:20135216 平台:windows10 软件:XAMPP,DreamWeaver 说明:该笔记是对网站编程语言的详细学习 一.PHP基础 0. 关于环境 ...

  5. Golang 语法学习笔记

    Golang 语法学习笔记 包.变量和函数. 包 每个 Go 程序都是由包组成的. 程序运行的入口是包 main. 包名与导入路径的最后一个目录一致."math/rand" 包由 ...

  6. JS数组学习笔记

    原文:JS数组学习笔记 最近在备课数组,发现很多ES5的方法平时很少用到.细节比较多,自己做了大量例子和整理,希望对大家了解JavaScript中的Array有所帮助. 概念 数组是值的有序集合.每个 ...

  7. MarkDown语法 学习笔记 效果源码对照

    MarkDown基本语法学习笔记 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式. 下面将对Markdown的基本使用做一个介绍 目 ...

  8. doy05循环语法学习笔记

    doy05循环语法学习笔记 一.while循环语法: 1.基本用法示例 x = 1 while x <= 5: print(x) x += 1 2.死循环:永远不结束的循环 如:while Tr ...

  9. Knockout.js快速学习笔记

    原创纯手写快速学习笔记(对官方文档的二手理解),更推荐有时间的话读官方文档 框架简介(Knockout版本:3.4.1 ) Knockout(以下简称KO)是一个MVVM(Model-View-Vie ...

随机推荐

  1. June 26,程序破解

    1.android程序破解练习初级 方法一: 文件名:KeygenMe#1.apk工具:ApktoolGui v2.0 Final 先用ApktoolGui v2.0 Final反编译成java通过查 ...

  2. BZOJ_1941_[Sdoi2010]Hide and Seek_KDtree

    BZOJ_1941_[Sdoi2010]Hide and Seek_KDtree Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得 ...

  3. [APIO 2014] 序列分割

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3675 [算法] 首先 , 我们发现将一段序列切成若干段所获得的收益与顺序无关 于是我 ...

  4. Linux下启动mongodb

    完成安装mongodb(略) 创建数据目录: # mkdir /data/mongo 创建配置文件 # vi /data/mongo/mongodb.cnf dbpath=/data/mongo/ l ...

  5. bzoj 3781 小B的询问——分块

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3781 非常经典的分块套路.于是时间空间比大家的莫队差了好多…… #include<io ...

  6. iOS 中这些是否熟练掌握——(2)

    接上一篇博文,本篇博文是作者原创,用于记录从网上查阅的一些资料,并对自己的知识体系进行一下总结,成文以供学习使用. 1.Cocoa Touch 包含了什么?不包含什么?与 Cocoa 有什么区别? 相 ...

  7. Sandy and Nuts

    题意: 现在有一个$n$个点的树形图被拆开,现在你知道其中$m$条边,已经$q$对点的$LCA$,试求原先的树有多少种可能. 解法: 考虑$dp$,$f(x,S)$表示$x$的子树内的点集为$S$(不 ...

  8. python 之单例

    # 单例模式 class MySQL: __instance = None def __init__(self): self.host = '127.0.0.1' self.port = 3306 @ ...

  9. P4091 [HEOI2016/TJOI2016]求和(第二类斯特林数+NTT)

    传送门 首先,因为在\(j>i\)的时候有\(S(i,j)=0\),所以原式可以写成\[Ans=\sum_{i=0}^n\sum_{j=0}^nS(i,j)\times 2^j\times j! ...

  10. perl 操作文件指针

    之前使用perl 脚本写了一个读取文件的小工具,但是由于当时使用的Tie 的方式,在处理大文件时,效率并不十分理想,所以在网上搜索了perl 如何操作文件指针的文章,自己也学习一下,本博客就是学习过程 ...