`
- 浏览:
126966 次
- 性别:
- 来自:
杭州
-
http://hi.baidu.com/gdancer/blog/item/a59e2c12479b4e54f919b814.html
/**
* 匿名函数和有名函数研究
* 函数是一个内部对象
* 匿名函数必须定义在匿名方法调用之前
*/
//function namedFunction(){
// //alert("hello world");
//}
//
//var annyFunction = function(){
//
//}
//function 有点 class的感觉
//alert(typeof(namedFunction)); //function
//alert(typeof(new namedFunction())); //object
//alert(typeof(annyFunction)); //function
//alert(typeof(new annyFunction())); //object
/**
* “function”(可以理解为构造器,即构造一个对象的仪器),是一个内部对象
* “object”(即已经被实例化了的构造器,即类的实例:对象),是一个实例化对象
*/
//alert(typeof(Function)); //function
//alert(typeof(new Function())); //function
//alert(typeof(Array)); //function
//alert(typeof(Object)); //function
//alert(typeof(new Array())); //object
//alert(typeof(new Date())); //object
//alert(typeof(new Object())); //object
/**
*Function是所有函数对象的基础,而Object则是所有对象(包括函数对象)的基础。
*在JavaScript中,任何一个对象都是 Object的实例,因此,可以修改Object这个
*类型来让所有的对象具有一些通用的属性和方法,修改Object类型是通过prototype来完成
*/
//Object.prototype.getType=function(){
// return typeof(this);
//}
//
//var array1=new Array();
//
//function func1(a,b){
// return a+b;
//}
//
//alert(array1.getType()); //object
//alert(func1.getType()); //function
/**
*将函数作为参数传递,或者是将函数赋值给其他变量是所有事件机制的基础。
*例如,如果需要在页面载入时进行一些初始化工作,可以先定义一个init的初始化函数,
*再通过window.onload=init;语句将其绑定到页面载入完成的事件。这里的init就是一个函数对象,
*它可以加入window的onload事件列表。
*/
//function func1(theFunc){
// theFunc();
//}
//function func2(){
// alert("ok");
//}
//func1(func2);
/**
* 传递给函数的隐含参数:arguments
* 当进行函数调用时,除了指定的参数外,还创建一个隐含的对象——arguments。
* arguments是一个类似数组但不是数组的对象,说它 类似是因为它具有数组一样的访问性质,
* 可以用arguments[index]这样的语法取值,拥有数组长度属性length
*/
//function func(){
// alert(typeof(arguments));
// for(var i=0;i<arguments.length;i++){
// alert(arguments[i]);
// }
//}
//func(1,2,3);
/**
* 递归计数
* @param {} n
* @return {Number}
*/
//var sum=function(n){
// if(1==n)return 1;
// else return n+sum(n-1);
//}
//alert(sum(100));
/**
* arguments对象的另一个属性是callee,它表示对函数对象本身的引用,这有利于实现无名函数的递归或者保证 函数的封装性
* @param {} n
* @return {Number}
*/
//var sum=function(n){
// if(1==n)return 1;
// else return n+arguments.callee(n-1);
//}
//alert(sum(100));
/**
* call 和 apply 的应用
* 它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:
*
*Function.prototype.apply(thisArg,argArray);
*Function.prototype.call(thisArg[,arg1[,arg2…]]);
*
*/
//定义一个函数func1,具有属性p和方法A
function func1(){
this.p="func1-";
this.A=function(arg){
alert(this.p+arg);
}
}
//定义一个函数func2,具有属性p和方法B
function func2(){
this.p="func2-";
this.B=function(arg){
alert(this.p+arg);
}
}
var obj1=new func1();
var obj2=new func2();
obj1.A("byA"); //显示func1-byA
obj2.B("byB"); //显示func2-byB
obj1.A.apply(obj2,["byA"]); //显示func2-byA,其中[“byA”]是仅有一个元素的数组,下同
obj2.B.apply(obj1,["byB"]); //显示func1-byB
obj1.A.call(obj2,"byA"); //显示func2-byA
obj2.B.call(obj1,"byB"); //显示func1-byB
/**
*与arguments的length属性不同,函数对象还有一个属性length,
*它表示函数定义时所指定参数的个数,而非调用时实际传递的参数个数
*
*/
深入认识JavaScript中的this指针
this指针是面向对象程序设计中的重要概念,它表示当前运行的对象。在实现对象的方法时,可以使用this指针来获得该对象自身的引用。
和其他面向对象的语言不同,JavaScript中的this指针是一个动态的变量,一个方法内的this指针并不是始终指向定义该方法的对象的,在上一节讲函数的apply和call方法时已经有过这样的例子。
JavaScript中的this指针是一个动态变化的变量,它表明了当前运行该函数的对象。由this指针的性质,也可以更好的理 解JavaScript中对象的本质:一个对象就是由一个或多个属性(方法)组成的集合。每个集合元素不是仅能属于一个集合,而是可以动态的属于多个集 合。这样,一个方法(集合元素)由谁调用,this指针就指向谁。实际上,前面介绍的apply方法和call方法都是通过强制改变this指针的值来实 现的,使this指针指向参数所指定的对象,从而达到将一个对象的方法作为另一个对象的方法运行。
每个对象集合的元素(即属性或方法)也是一个独立的部分,全局函数和作为一个对象方法定义的函数之间没有任何区别,因为可以把全局函数和变量看作为window对象的方法和属性。也可以使用new操作符来操作一个对象的方法来返回一个对象,这样一个对象的方法也就可以定义为类的形式,其中的 this指针则会指向新创建的对象。在后面可以看到,这时对象名可以起到一个命名空间的作用,这是使用JavaScript进行面向对象程序设计的一个技 巧。例如:
以下为引用的内容:
var namespace1=new Object();
namespace1.class1=function(){
//初始化对象的代码
}
var obj1=new namespace1.class1();
这里就可以把namespace1看成一个命名空间。
obj1.getP=function(){
alert(this.p); //表面上this指针指向的是obj1
}
这里的this关键字是不可省略的,即不能写成alert(p)的形式。这将使得getP函数去引用上下文环境中的p变量,而不是obj1的属性。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
以下是对"Javascript面向对象基础"的详细解释: 1. **对象和属性**:在JavaScript中,对象是键值对的集合,可以通过花括号{}创建。例如,`let person = {name: "张三", age: 30}`定义了一个包含姓名和年龄属性的...
在这个“JavaScript面向对象基础”的资料中,我们将会探讨JavaScript中的类、对象、封装、继承以及多态等关键概念。 1. **对象与对象字面量** 在JavaScript中,对象是由键值对组成的无序集合,可以使用对象字面量...
《JavaScript内核系列》和《JavaScript面向对象基础》这两本书是深入理解JavaScript编程的重要资源。JavaScript,作为一种广泛应用于Web开发的脚本语言,其内核和面向对象特性是开发者必须掌握的基础知识。以下是对...
JavaScript面向对象基础PPT,讲述了何谓面向对象、面向对象特点、组成及写法、工厂模式、原型以及如何将普通面向过程的代码转换为面向对象的基本原则
在本文中,我们将深入探讨 JavaScript 的面向对象基础,主要包括类的定义、实例化以及对象属性和方法的引用。 首先,让我们了解如何在 JavaScript 中定义一个类。在 JavaScript 中,类通常通过函数来实现。例如,...
面向对象编程的基础包括类、对象、继承和多态等概念。类是对象的模板或蓝图,定义了一组属性(数据成员)和方法(函数)。对象则是类的实例,具备类所定义的属性和行为。JavaScript虽然没有传统的类定义,但可以通过...
JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在... 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库
《JavaScript面向对象编程指南》内容包括:JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码...
本书全面覆盖了面向对象编程的基础理论,并结合JavaScript的具体实现进行讲解。 - **第一章:JavaScript简介**:介绍JavaScript的发展历程、特点及其与Web浏览器的关系。 - **第二章:面向对象编程简介**:解释OOP...
本文介绍了JavaScript面向对象编程的基本概念和技术细节,包括变量和对象的基础用法、函数的作用以及如何通过封装和继承来构建复杂的对象层次结构。JavaScript的独特之处在于它的灵活性和动态性,这使得它成为了一种...
编写良好的面向对象基础代码之后,建立一个强大的代码测试环境是必要的。这有助于发现和修复代码中的缺陷,提高软件的稳定性和可靠性。在本书中,作者将介绍不同的测试工具,包括调试工具如Firefox的Firebug插件,它...
JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。
《JavaScript面向对象精要》这本书不仅介绍了JavaScript面向对象的基础概念,还深入探讨了其实现机制及其在实际开发中的应用。对于希望提高自己JavaScript技能水平的开发者来说,本书是一本不可多得的好书。通过学习...
### JavaScript面向对象编程知识点概述 #### 一、现代JavaScript编程概览 - **JavaScript的演进**:自诞生以来,JavaScript经历了从一个简单的脚本语言到现今被广泛应用于构建复杂应用的强大编程语言的过程。它的...