高手整理的javascript高级学习笔记

 基本的类的使用

方法一

function sth(a) // 构造函数
{
this.a = a;
this.fun = output; // 成员函数
}

function output(a, b, c)
{
document.write(this.a);
}

// 调用
var s = new sth(250);

s.fun(1, 2, 3);

ouput(1, 2, 3); // 如果output在sth之前就是错的

方法二

function sth(a)
{
this.a = a;

this.output = function()

{
document.write(this.a);
}
}

var s = new sth(2);

s.output(); // 输出2

继承

方法一

function A(x)
{
this.x = x;
}

function B(x, y)
{
// 方法1
/*
this.construct = A;
this.construct(x);
delete this.construct;

*/

// 方法2
//A.call(this, x);

// 方法3
A.apply(this, new Array(x)); // 亦可A.apply(this, arguments), 不过arguments参数顺序一定要对

this.y = y;
this.print = function()

{
document.write("x = ", x,

", y = ", y);

}
}

var b = new B(1, 2);

b.print();

alert(B instanceof A); // 输出false

优点:可以实现多继承(多调用call就好)

缺点:

· 必须以构造函数方式使用

· 使用instanceof运算符运算此类继承结果为false

方法二

function A()

{

}

A.prototype.x = 1;

function B()

{

}

B.prototype = new A(); // 不能带参数!
B.prototype.y = 2;
B.prototype.print = function()

{

document.write(this.x, ", ", this.y, "<br>");

}

var b = new B();
b.print();
document.write(b instanceof A); // 输出true

缺点:

· 不能实现多继承

· 构造函数不带参数

Tips

通常使用混合模式,两者一起用

function A(x)
{

this.x = x;
}

A.prototype.printx = function() // 写到A类里面this.printx = function....也是可以的,下同
{

document.write(this.x, "<br>");
}

function B(x, y)
{
A.call(this, x);
this.y = y;

}

B.prototype = new A(); // 不能带参数!
B.prototype.printxy = function()

{

document.write(this.x, ", ", this.y, "<br>");
}

var b = new B(1, 2);
b.printx(); // 输出1
b.printxy(); // 输出1, 2
document.write(b instanceof A); // 输出true

类似静态成员函数的使用

function sth(a)
{
this.a = a;
}

sth.fun = function(s)
{
document.write(s.a);
}

var s = new sth(2);

sth.fun(s); // 输出2

对象的释放

var obj = new Object; // obj是引用

obj = null; // 取消引用,会自动进行垃圾回收;如果需要根本释放此对象,要将它的所有引用都赋值为null

函数对象

var v = new Function("arg1", "arg2", "document.write(arg1 + arg2);"); // 定义一个函数对象,参数分别是arg1,arg2

v(1, 2); // 将会输出3

回调函数

function callback(func, arg)
{
func(arg);
}

function fun(arg)
{
document.write(arg);
}

//callback(func, "sb"); // 这种做法不行

var func = new Function("arg", "fun(arg);");
// 当然也可以把func(arg)换成具体的执行代码,
// 但是函数代码庞大了就最好这样做了

callback(func, "sb");

函数的重载

function fun()
{
switch (arguments.length)
{
case 1:
document.write(arguments[0]);
break;
case 2:
document.write(arguments[0] + arguments[1]);
break;
default:
document.write("ERROR!");
break;
}
}

fun(1);
fun(1, 2);

利用函数闭包实现有“静态变量”的函数

function fun()

{
var v = 1;

function fun2()
{
++v;
document.write(v);
document.write("<br>");
return v;
}
return fun2;
}

var func = fun();
func(); // 输出2
func(); // 输出3
func(); // 输出4

时间: 2024-03-23 05:41:56

高手整理的javascript高级学习笔记的相关文章

javascript高级学习笔记整理_javascript技巧

一.js面向对象的一种实现 复制代码 代码如下: <script type="text/javascript"> function Person() { this.name = "张三"; this.age = 0; var nickName = "小三"; //类似私有变量,函数中的局部变量在函数执行完后自动销毁. this.SayHi = function () { alert("我的名字是" + this.n

JavaScript闭包学习笔记

原文:JavaScript闭包学习笔记 闭包(closure)是JavaScript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 下面就是我的学习笔记,对于JavaScript初学者应该是很有用的. 一.变量的作用域 要理解闭包,首先必须理解JavaScript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. JavaScript语言的特殊之处,就在于函数内部可以直接读取全局变量. 1 var n=999; 2 3 function f1() { 4 alert

JavaScript高级程序设计笔记 事件冒泡和事件捕获

原文:JavaScript高级程序设计笔记 事件冒泡和事件捕获 1.事件冒泡 要理解事件冒泡,就得先知道事件流.事件流描述的是从页面接收事件的顺序,比如如下的代码: <body> <div> click me! </div> </body> 如果在body和div内都注册了click的事件监听,之后又点击了div区域,是body先响应还是div先响应?有意思的是,当时的浏览器开发团队IE和Netscape提出了差不多完全相反的事件流的概念.IE的事件流是事件

Javascript基础学习笔记(菜鸟必看篇)_基础知识

什么是变量? 变量是用于存储信息的容器 变量的声明 语法: var 变量名 变量名 = 值; 变量要先声明再赋值 变量可以重复赋值 变量的命名规则 变量必须以字母开头: 变量也能以$和_符号开头(不过我们不推荐这么做): 变量名称对大小写敏感(a和A是不同的变量). 语句 语句以一个分号结尾:如果省略分号,则由解析器确定语句的结尾. 有个好的编码习惯,都要以 ; 结尾 数据类型 在JavaScript中,一段信息就是一个值(value).值有不同的类型,大家最熟悉的类型是数字.字符串(strin

JavaScript继承学习笔记【新手必看】_javascript技巧

JavaScript作为一个面向对象语言(JS是基于对象的),可以实现继承是必不可少的,但是由于本身并没有类的概念,所以不会像真正的面向对象编程语言通过类实现继承,但可以通过其他方法实现继承.实现继承的方法很多,下面就只是其中的几种. 一. 原型链继承 function Person() { //被继承的函数叫做超类型(父类,基类) this.name='mumu'; this.age='18'; } Person.prototype.name='susu';//当属性名相同时需就近原则,先在实

整理Javascript函数学习笔记_javascript技巧

1.什么是函数 如果需要多次使用同一段代码,可以把它们封装成一个函数.函数(function)就是一组允许在你的代码里随时调用的语句.每个函数实际上是一个短小的脚本. 如:要完成多组数和的功能. var sum; sum = 3+2; alear(sum); sum = 7+8; alear(sum); ......//不停的重复两行代码 如果要实现8组数的和,就需要16行代码,实现的越多,代码行也就越多.所以我们可以把完成特定功能的代码块放到一个函数里,直接调用这个函数,就省去重复输入大量代码

整理Javascript数组学习笔记_javascript技巧

1.什么是数组数组是一个值的集合,每个值都有一个索引号,从0开始,每个索引都有一个相应的值,根据需要添加更多数值. <script type="text/javascript"> var myarr=new Array(); //定义数组 myarr[0]=80; myarr[1]=60; myarr[2]=99; document.write("第一个人的成绩是:"+myarr[0]); document.write("第二个人的成绩是:&q

JavaScript递归函数学习笔记

JavaScript 支持函数的递归调用. 所谓递归函数,就是在函数体内调用函数本身. 使用递归函数的一个常见例子就是求阶乘. 利用递归函数求 6! .  代码如下 复制代码 <script type="text/javascript"> function fact(num){     if (num<=1){         return 1;     }else{         return num*fact(num-1);     } } document.w

JavaScript数据类型学习笔记分享_javascript技巧

本文实例为大家讲解JavaScript数据类型的相关资料,供大家参考,具体内容如下 1.引用类型 引用类型的值是引用类型的一个实例,引用类型是一种数据结构,用于将数据和功能组织在一起,也常被叫做类. 对象时某个特定引用类型的实例,新对象是使用new操作符后跟一个构造函数来创建的,构造函数本身就是函数,是出于创建新对象的目的而定义的.  var person = new Object(); 2.Object类型 (1)Object类型对于应用程序中存储和传输数据来说,是非常理想的选择. (2)Ob