我不知道你还学过其它什么语言,如果学过,可以进行类比
创新互联是网站建设技术企业,为成都企业提供专业的网站制作、做网站,网站设计,网站制作,网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制适合企业的网站。10多年品质,值得信赖!
JAVASCRIPT作为一种脚本语言,可以说非常强大。
我感觉它是属于C系统的语言:
1、数据类型
2、基本语法
3、流程控制
4、API
5、高级特性(闭包、面向对象)
1.1 一切皆为对象
JavaScript里所有的东西都是对象. 对象是属性的集合. 数字, 字符串, 布尔值等原始值是"伪对象", 它们同样拥有属性, 但是是在栈上分配并按值传递. 而其他的对象是堆上分配并按引用传递.
一个很重要的概念是, 函数也是对象, 能够作为变量的值, 返回值, 参数或者属性的值. 函数对象特殊的地方是能通过"xxx()"语法执行包含在xxx函数对象内的代码. 因为这一特殊性, typeof xxx 将会返回function, 但这只是一种便利设施.
1.2 对象的属性可以动态添加和删除
var foo = new Object();
// 为foo对象添加bar属性
foo.bar = "foobar";
alert(foo.bar); //foobar
// 删除foo对象的bar属性
delete foo.bar;
alert(foo.bar); //undefined
1.3 除了宿主对象, 其它对象皆由构造函数创建
要有对象, 就先要有创建对象的方法.
在C++/Java等语言, 这个方法就是实例化XXX类的一个实例xxx.
而在JavaScript的世界里实际没有类的东西, 当然仍然可以用"类"和"实例"等惯用语来描述JavaScript中类似的行为, 但其机制是完全不同的. JavaScript的对象是由构造函数创建的, 每个对象都有constructor属性表示创建该对象的构造函数:
function Test() { this.a = "hello"; }
var test = new Test(); // 由Test构造函数创建
alert(test.constructor);
var o = { a: "hello" };
//实际相当于
var o_ = new Object();
o_.a = "hello"; // 由Object构造函数创建
alert(o.constructor);
构造函数也是对象, 那构造函数是由什么创建? 内建的Function函数:
function Test(a, b)
{
alert(a+b);
}
// 相当于:
Test = new Function(["a", "b"], "alert(a+b);");
Function函数又是由什么创建? 实际上Function是本机代码实现的固有对象. 不过为了一致性, Function也有constructor属性, 该属性指向它自己. 接上面的代码:
/* 输出 function Function(){
[native code]
}
*/
alert(Test.constructor);
alert(Test.constructor.constructor === Test.constructor); // true
alert(Test.constructor === Object.constructor); // true
2 原型prototype
2.1 prototype的概念
prototype是构造函数的一个属性, 该属性指向一个对象. 而这个对象将作为该构造函数所创建的所有实例的基引用(base reference), 可以把对象的基引用想像成一个自动创建的隐藏属性. 当访问对象的一个属性时, 首先查找对象本身, 找到则返回; 若不, 则查找基引用指向的对象的属性(如果还找不到实际上还会沿着原型链向上查找, 直至到根). 只要没有被覆盖的话, 对象原型的属性就能在所有的实例中找到.
原型默认为Object的新实例, 由于仍是对象, 故可以给该对象添加新的属性:
// prototype默认为new Object(); 为了方便, 记为p_obj
function Person(name) {
this.name = name;
}
// 为 p_obj 增加 sayName 属性
Person.prototype.sayName = function(){
alert(this.name);
}
var john = new Person("John"); // john 的 base reference指向p_obj
var eric = new Person("Eric"); // eric 的 base reference也是指向p_obj
// 注意sayName代码中的this将指向实例化后的对象(this绑定)
john.sayName(); // john对象本身没有sayName属性, 于是访问原型对象p_obj的sayName属性
eric.sayName(); // 访问同一个原型对象p_obj的sayName属性
var tmp = Person.prototype;
tmp.boss = "David";
// 于这个运行点, p_obj已经被修改
// 根据上述属性访问流程, 新的修改(boss属性)能反映到所有的实例, 包括已经创建和即将创建的
alert("John's boss is " + john.boss);
alert("Eric's boss is " + eric.boss);
// hisCar和sayCar属性将增加到john对象而不是p_obj对象..
john.hisCar = "Audi";
john.sayCar = function(){
alert(this.name + " has a car of " + this.hisCar);
}
john.sayCar();
// ..因此下一句将错误, 因为eric对象本身和原型p_obj都没有sayName属性
/* eric.sayCar(); */
2.2 原型链
除了能修改prototype指向的对象, 还能修改prototype指向哪一个对象, 即为prototype赋予一个不同的对象. 这可以实现一种简单的继承:
function Superman() {}
Superman.prototype.sayHello = function(){
alert("I'm a superman.");
}
function SupermanCan(skill){
this.skill = skill;
}
// 为prototype赋予Superman的实例..
SupermanCan.prototype = new Superman();
// ..再动态添加新的属性
SupermanCan.prototype.sayMore = function(){
this.sayHello(); // 调用"父类"的方法
alert("I can " + this.skill);
}
var david = new SupermanCan("fly");
// output: I'm a superman. I can fly
david.sayMore();
如果先实例化出一个对象, 再为构造函数prototype赋予一个不同的对象, 将会: 已经创建的对象的基引用不变, 将来创建的对象的基引用为新的原型对象:
var f1 = {echo: function() { alert("sound"); } };
function Foo() {};
var foo = new Foo(); // foo的基引用指向Object实例
Foo.prototype = f1;
/* 未定义, 因为这是"foo对象自己或者基引用指向的对象有echo属性吗?"
而不是"foo对象自己或者Foo.prototype指向的对象有echo属性吗?" */
alert(foo.echo);
var foo2 = new Foo(); // foo2的基引用指f1对象
foo2.echo(); // output: sound
所有的构造函数的prototype都不能为空, 就是说Superman.prototype = null 会被解释引擎无视; 另一方面, Object构造函数也有prototype属性(该属性是只读的, 可以为原型增加属性,但不能赋予不同的对象), 故因此可以有多层的原型链, 但原型链的根必定会是Object.prototype . 这意味着给Object.prototype增加属性影响到所有对象:
Object.prototype.echo = function() {
alert("hello");
}
// echo属性将增加到所有对象固有对象和自定义对象
var arr = new Array();
arr.echo();
Array.echo();
function ObjCons() {
this.dummy = "d";
}
var obj = new ObjCons();
obj.echo();
ObjCons.echo();
3. 构造函数和new的实质
构造函数是一个地地道道的函数, 一个函数之所以能成为构造函数, 是因为new运算符:
this.msg = "window";
function Test()
{
alert(this.msg);
}
Test(); // window
var test = new Test(); // undefined. 因为test对象没有定义msg属性
二者区别在于如何切入对象: Test() 在某个对象(例子中为window)的上下文上执行代码, 即this指向这个对象; new Test()创建一个新对象, 并以这个新的对象为上下文(this指向新对象)执行代码, 然后返回这个新对象.
假如有个函数:
function Test() {
var dummy = "have money";
this.wish = dummy;
doSomeThing();
}
结合以上的所有论述, 可以推测new Test()行为的伪代码表示为:
创建一个新对象temp;
temp.constructor = Test;
temp.(base reference) = Test.prototype; // 这一句先于代码体执行, 意味着构造函数里的this.xxx能访问原型对象的属性xxx
bind: this = temp; // 将this绑定到temp对象
// 开始执行函数代码
var dummy = "have money";
this.wish = dummy; // 为temp对象添加wish属性
doSomeThing();
....
// 结束执行函数代码
return temp;
这个未必会符合内部的二进制实现, 但却能很好地解释了JavaScript的特性.
各位,网页设计又不是网站编程,还是我来介绍几本吧!
精美网页特效设计技巧精粹
网页制作、网页图像处理、网页动画设计以及各种实用的特效制作等的方法与技巧,涵盖了网页版式设计、色彩设计、网页图形创意、网页图标设计、网页动画设计、网页字体设计、网页特效设计等。几乎涉及到了与网页相关的方方面面,全书内容丰富、自成体系、实例众多。
动态网页设计培训教程 动态网页设计培训教程
网页设计软件的使用方法和最新的网页设计技术。全书共分14章,分别介绍了网页设计的基础知识;超文本标记语言HTML,使用FrontPage 2000和Dreamweaver 3.0设计网页的要领;使用Photoshop 6.0 和ImageReady 3.0优化和处理WEB图像等内容。
JavaScript 动态网页经典实例教程
网页设计实例,介绍动态网页设计中的常用方法、重点和难点。这些实例包括了动态状态栏,动态文本框,应用时间,动态层,动态内容,动态位置,动态元素内容,滚动效果,动态页面导航,动态数据表单,动态表格等内容。读者对象该书适合于广大的网页设计从业人员,为动态网页开发设计中需要解决的实际问题提供 ...
网页美术设计入行实战(全彩)(含光盘1张) 网页美术设计入行实战(全彩)(含光盘1张)
网页美术设计行业分析;就业指导;小型商业网页设计;大型商业网站设计;通过实际工作的案例以及虚拟应用场景,将每个案例的使用环境描述出来,涉及了网页设计在实际应用中使用的软件Flash,Dreameaver的使用,网页制作的技巧,并对一些陌生的或不常用的功能做了提示性的说明与解析。有多个实际案例供参考;网页设计的经验 ..
网上筑巢--循序渐进设计网页
网页.包括输入文字后设置格式,使网页内容更加鲜明,增加图片使网页更加生动,增加声音让网页学会"说话"等.此外还介绍网页制作高手的很多决窍.本书的读者对象是准备上网或已经上网,但上网经验不足的初学者.
如果你真的想学习编程,那下面这些书是比不可少的。
JavaScript基础与实践教程
本书在介绍JavaScript相关知识的基础上,主要结合实例讲解JavaScript的实际应用。内容主要包括JavaScript语言的语法、 JavaScript面向对象的特性、调试JavaScript、JavaScript结合CSS应用于WEB编程、JavaScript的Dom编程、 JavaScript的基础应用、服务器端的应用、通过综合实例介绍JavaScript的高级应用。
边学边用JAVASCRIPT
JAVASCRIPT是实现网页动态性、交互性的脚本语言。本书通俗易懂,按照循序渐进的方法详细介绍了JAVASCRIPT的基本概念, HTML基本知识、JAVASCRIPT的基本语法及其内置对象和浏览器对象。书中对于每个知识点都配备了相应的实例,帮助读者加深理解。本书适合为 JAVASCRIPT初学者的培训教材,也可以作为中、高级网页编程 ...
网页样式设计――CSS使用详解 网页样式设计――CSS使用详解
CSS的基本概念、CSS属性、格式化模型以CSS单位等。此外,对于CSS的延伸扩展部分也做了全面的介绍,包括CSS定位技术、打印支持、框架结构、声音CSS滤镜变换效果等。书中附有大量实用例子帮助读者掌握和编写样式表单文档。本书内容翔实,深入浅出,是网络开发人员和网络爱好者的理想参考书。
网页制作全接触――HTML 4.0 CSS 网页制作全接触――HTML 4.0 CSS
CSS的内容,包括HTML 4.0各个标记的语法和属性,CSS各上属性的语法和属性值,同时介绍了两者在Dreamweaver中的实现,提供大量灵活使用HTML 4.0和CSS制作动态网页的实例。本书第一部分是590811及其应用,第二部分是CSS及其应用,附录中了JavaScript参考手册、CSS兼容性列表和字符实体集。
网页设计与制作――MX 2004(第2版)
网页制作套装软件Macromedia Studio MX2004中的网页制作三剑客为主要内容,介绍客户端网页的制作。全书共分9章,第1章网页制作基础,介绍与网页制作有关的基础知识;第2章至第5章介绍Dreamweaver MX2004的使用,其中穿插介绍CSS、JavaScript在网页中的应用;第6章和第7章介绍Fireworks MX2004的使用;第8章和第9章介绍F ...
精通ASP网络编程
ASP网络编程技术的实用教程。书中举例大量典型实用,综合了众多ASP程序员的实际开发经验。本书适合广大网络设计和开发人员以及对ASP感兴趣的编程爱好者阅读。
ASP开发实例(1CD)
ASP进行Web开发。主要内容有:ASP基本对象的使用,在ASP中使用第三方或自制的ActiveX控件,数据库对象的使用和设计,SQL语句的使用等。本书内容由浅入深,论述深入、全面,实例覆盖了ASP编程的大部分内容,每个实例着重介绍一个或几个知识要点。此外,还附有源程序代码多媒体光盘,帮助ASP爱好者快速深入地掌握ASP编程? ...
高校计算机教程系列 JSP实用教程
JSP运行环境的配置、JSP语法、JSP内置对象、JSP与文件、JSP与数据库、JSP与JavaBrsnd等内容;第7章至第8章介绍了怎样使用JSP技术创建完整的网站。第9章讲述Java Servlet,针对JSP与servlet结合开发网站做了详细的介绍
JSP实用案例教程
JSP)程序设计技术。主要内容包括:B/S开发模式和主流技术介绍,JSP编程基础,在Windows 2000/XP和Linux环境下JSP运行环境的配置过程,HTML与JSP的交互过程,JSP中的页面元素,编译指令和操作指令,JSP中常用的对象,JDBC,JavaBean,JSP的综合应用举例,Servlet的概念和使用,如何在JSP中应用XML,JSP的高级应用以及? ...
PHP与MySQL5程序设计(第2版)
PHP脚本语言和MySQL数据库这两种目前最流行的开源软件,主要内容包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、 PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、触发器和视图等。本书实用性强,帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何结合这些卓越的技术创建数据库驱动的 ...
第一,可以体现作者的总体思路。提纲是由序码和文字组成的一种逻辑图表,是帮助作者考虑文章全篇逻辑构成的写作设计图。其优点在于,使作者易于掌握论文结构的全局,层次清楚,重点明确,简明扼要,一目了然。[2]
第二,有利于论文前后呼应。有一个提纲,可以帮助我们树立全局观念,从整体出发,在检验每一个部分所占的地位、所起的作用,相互间是否有逻辑联系,每部分所占的篇幅与其在全局中的地位和作用是否相称,各个部分之间的比例是否恰当和谐,每一字、每一句、每一段、每一部分是否都为全局所需要,是否都丝丝入扣、相互配合,成为整体的有机组成部分,都能为展开论题服务。经过这样的考虑和编写,论文的结构才能统一而完整,很好地为表达论文的内容服务。
第三,有利于及时调整,避免大返工。在毕业论文的研究和写作过程中,作者的思维活动是非常活跃的,一些不起眼的材料,从表面看来不相关的材料,经过熟悉和深思,常常会产生新的联想或新的观点,如果不认真编写提纲,动起笔来就会被这种现象所干扰,不得不停下笔来重新思考,甚至推翻已写的从头来过;这样,不仅增加了工作量,也会极大地影响写作情绪。毕业论文提纲犹如工程的蓝图,只要动笔前把提纲考虑得周到严谨,多花点时间和力气,搞得扎实一些,就能形成一个层次清楚、逻辑严密的论文框架,从而避免许多不必要的返工。另外,初写论文的学生,如果把自己的思路先写成提纲,再去请教他人,人家一看能懂,较易提出一些修改补充的意见,便于自己得到有效的指导。
9相关范例
编辑
在毕业论文的写作过程中,指导教师一般都要求学生编写提纲。从写作程序上讲,它是作者动笔行文前的必要准备;从提纲本身来讲,它是作者构思谋篇的具体体现。所谓构思谋篇,就是组织设计毕业论文的篇章结构。因为毕业论文的写作不像写一首短诗、一篇散文、一段札记那样随感而发,信手拈来,用一则材料、几段短语就表达一种思想、一种感情;而是要用大量的资料,较多的层次,严密的推理来展开论述,从各个方面来阐述理由、论证自己的观点。因此,构思谋篇就显得非常重要,于是必须编制写作提纲,以便有条理地安排材料、展开论证。有了一个好的提纲,就能纲举目张,提纲挚领,掌握全篇论文的基本骨架,使论文的结构完整统一;就能分清层次,明确重点,周密地谋篇布局,使总论点和分论点有机地统一起来;也就能够按照各部分的要求安排、组织、利用资料,决定取舍,最大限度地发挥资料的作用。
有些学生不大愿意写提纲,喜欢直接写初稿。如果不是在头脑中已把全文的提纲想好,如果心中对于全文的论点、论据和论证步骤还是混乱的,那么编写一个提纲是十分必要的,是大有好处的,其好处至少有如下三个方面:
第一,可以体现作者的总体思路。提纲是由序码和文字组成的一种逻辑图表,是帮助作者考虑文章全篇逻辑构成的写作设计图。其优点在于,使作者易于掌握论文结构的全局,层次清楚,重点明确,简明扼要,一目了然。
第二,有利于论文前后呼应。有一个提纲,可以帮助我们树立全局观念,从整体出发,在检验每一个部分所占的地位、所起的作用,相互间是否有逻辑联系,每部分所占的篇幅与其在全局中的地位和作用是否相称,各个部分之间的比例是否恰当和谐,每一字、每一句、每一段、每一部分是否都为全局所需要,是否都丝丝入扣、相互配合,成为整体的有机组成部分,都能为展开论题服务。经过这样的考虑和编写,论文的结构才能统一而完整,很好地为表达论文的内容服务。
第三,有利于及时调整,避免大返工。在毕业论文的研究和写作过程中,作者的思维活动是非常活跃的,一些不起眼的材料,从表面看来不相关的材料,经过熟悉和深思,常常会产生新的联想或新的观点,如果不认真编写提纲,动起笔来就会被这种现象所干扰,不得不停下笔来重新思考,甚至推翻已写的从头来过;这样,不仅增加了工作量,也会极大地影响写作情绪。毕业论文提纲犹如工程的蓝图,只要动笔前把提纲考虑得周到严谨,多花点时间和力气,搞得扎实一些,就能形成一个层次清楚、逻辑严密的论文框架,从而避免许多不必要的返工。另外,初写论文的学生,如果把自己的思路先写成提纲,再去请教他人,人家一看能懂,较易提出一些修改补充的意见,便于自己得到有效的指导。
简单提纲举例
以《关于培育和完善建筑劳动力市场的思考》为例,简单提纲可以写成下面这样:
一、序论
二、本论
(一)培育建筑劳动力市场的前提条件
(二)目前建筑劳动力市场的基本现状
(三)培育和完善建筑劳动力市场的对策
三、结论
存储不一样,引用可以看成存储的指针,主要是array,object这样的对象是引用。
var arr1=[123,456];
var arr2 = arr1;
arr2.push(888);
arr1.push(999);
结果,同一数组数组都会被修改:
for(var i=0;i arr1.length;i++) {
console.log(arr1[i]+"\t");
}
console.log("\n");
for(var i=0;i arr2.length;i++) {
console.log(arr2[i]+"\t");
}
两个数组输出一样,这就是所谓的应用,引用归结下来就是,存放实际值得地方相同。变量仅仅代表了地址指针。举一反三,对象也是一样的道理。
至于普通变量,用到后就会在静态存储区分配空间(全局)或者栈上分配存储空间(函数中)。
var bb =2;
var aa =bb;
这块给bb分配一个存储空间放2,再给bb分配一个存储空间放2,理解上存储的内容是值复制。
代码真正执行的时候 bb aa 函数名这些变量也需要空间存储,编译类型的代码会把他给弄成指针(这个表述跟真的指针类型有区别,我看过的书籍中没先关论述,先就这么理解),js解释性的语言,由解释器负责分配。
我给你讲得这个东西,应该是没错。因为js是解释性语言,他的解释器,比如浏览器,node.js都是c/c++写的。
[img]