1、ECMAScript中的继承(inheritance)
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <script type="text/javascript"> function clickMe() { /* 实例化基类*/ var superPerson = new SuperPerson(); superPerson.getFriends();//111,222 /* 实例化子类 */ var sonPerson1 = new SonPerson(); sonPerson1.getFriends(); //333,444 //sonPerson1.sayName(); //正确写法 Tom // sonPerson1.sayAge();//错误写法 sonPerson1.friends.push("999"); sonPerson1.getFriends();//333,444,999 var sonPerson2 = new SonPerson(); sonPerson2.getFriends(); //333,444 /* PS: 本处而非书上说的 sonPerson2.getFriends();输出结果是333,444,999 * 未实现共享属性friends,实例中更改原型属性,并不能被另一实例所共享(书中解释存在异议) */ } /* 基类*/ function SuperPerson() { //基类构造函数,存放属性 this.name = "Tom"; this.sex = "F"; this.age = 12; this.friends = ["111", "222"]; } SuperPerson.prototype = { //基类原型模式,存放方法 constructor: SuperPerson, getFriends: function () { alert(this.friends); } } /* 子类 */ function SonPerson() { //子类构造函数,存放属性 this.tel = 1389909; this.friends = ["333", "444"]; this.sayName = function () { //子类中调用基类属性的方法必须存在构造函数模式中创建,不能使用原型模式创建【重点:正确写法】 alert(this.name); } } SonPerson.prototype = new SuperPerson(); //SonPerson类继承SuperPerson类 /* 【重点:错误写法】 * 以上刚刚把SuperPerson的实例赋值给原型,又接着将原型替换成一个对象字面量而导致的问题 * 由于现在的本原型包含的是一个Object的实例,而非SuperPerson实例 * 因此我们设想中的原型链已近被切断--SubPerson和SuperPerson之间已经没有关系了 * */ //SonPerson.prototype = { // sayAge: function () { // alert(this.age); // } //} </script> </head> <body> <form id="form1" runat="server"> <input type="button" name="点我 " value="点我 " onclick="clickMe()" /> </form> </body> </html>
2、组合继承(包括原型链和借用构造函数),又称为伪经典继承
构造函数模式:它的每个成员都无法得到复用,包括函数;
原型模式:使用构造函数的prototype属性来指定那些应该共享的属性和方法;
既使用组合继承来吸收两者的优先,创建实例属性独立,方法复用的对象。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> <script type="text/javascript"> // 【组合继承(实战用法):包含了借用构造函数继承和原型链继承】 // 【区别】 /* 【借用构造函数】又称经典继承:目的借用构造函数来实现对实例属性的继承 */ /* 【原型链继承】普通继承:目的使用原型链实现对原型属性和方法的继承 */ function clickMe() { var superType = new SuperType(); superType.getColors(); //111,222 var subType1 = new SubType(); subType1.getColors(); //111,222 subType1.colors.push("333"); subType1.getColors(); //111,222,333 var subType2 = new SubType(); subType2.getColors();//111,222 } function SuperType() { this.colors = ["111","222"]; } SuperType.prototype = { getColors: function () { alert(this.colors); } } function SubType() { SuperType.call(this); //经典继承:继承实例属性 } SubType.prototype = new SuperType(); //原型链继承:继承方法 </script> </head> <body> <form id="form1" runat="server"> <input type="button" name="点我 " value="点我 " onclick="clickMe()" /> </form> </body> </html>
3、JS的闭包
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TestHelloWorld.aspx.cs" Inherits="TestWebButton.JavaScript.TestHelloWorld" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head id="Head1" runat="server"> <title></title> <script type="text/javascript"> // 【闭包】 /*【完美的闭包】 * 1、在一个函数的生命周期内所有的属性都得到释放且独立; * 2、在函数内属性的作用域应该处于块作用域内(“{}”表示块作用域); * */ function clickMe() { /* 在场景中 报错的为实现闭包 */ showNameError(6); //7 showNameRight(6); //报错,i未定义 perfect(10); //报错,num未定义 } /* 非闭包 */ function showNameError(num) { for (var i = 0; i <= num; i++) { document.write( "</br>"+"Error : " + i ); } alert(i); //7,此处i为function showNameError(num){}函数内作用域 } /* 闭包 */ function showNameRight(num) { /* *块级作用域(通常称为私有作用域) *(function () { * })() *不要小看这两个括号:1、第一个括号表示定义一个匿名函数;2、第二个括号表示执行这个匿名函数; */ (function () { for (var i = 0; i <= num; i++) { document.write("Right : " + i + "</br>"); } })() alert(i); //报错,i未定义 } /* 完美的闭包 PS:我理解的 */ function perfect(num_) { (function () { for (var i = 10; i <= num_; i++) { var _num = document.getElementById("10").value; //JS不会主动将持有的DOM对象释放 var num = _num; _num = null; //手动释放 document.write("Right : " + num + "</br>"); // num的作用域仅存在于块作用域中 } })() alert(num); //报错,num未定义 } //clickMe(); </script> </head> <body> <form id="form1" runat="server"> <input type="text" id="10" name="num" value="10" /> <input type="button" name="点我 " value="点我 " onclick=" perfect(10)" /> </form> </body> </html>
相关推荐
中级软件开发 代码 401 - 高级软件开发 我在其中使用了以下功能: 1-斜体 2- 表格 具有正确字符的复选框 没有正确字符的复选框 5- 有序列表 6-图像 7- 链接 代码 201 的目录 读号 章节名称 介绍性 HTML 和 ...
java学习笔记大全:java内容介绍 java编程可以分成三个方向: 1、java se (j2se)桌面开发 java中的基础中的基础 2、java ee (j2ee)web开发 3、java me (j2me)手机开发 java se课程介绍 java面向对象编程(基础) java...
java ee中级部分 Servlet--Jsp-->mvc模式 java ee高级部分 Struts--Ejb--Hibernate--Spring--Ajax(ext,dw2)-->ssh框架 java之父gosling 1990 sun启动 绿色计划 1992 创建oak语言-->java 1994 gosling参加硅谷大会...
JavaScript 中级笔记
severlet jsp 分页 ajax等技术的笔记
3,作用域 所有的面向对象的语言都有某种形式的作用域,JavaScript也不例外。在JavaScript里,作用域是由函数划分的,而不是由块(while,if之类的)来划分的。 我们先来看一个简单的作用域的例子。 [Ctrl+A 全选 ...
观看太牛程序员js基础+中级部分的,视频,相关的js笔记。
中级JS笔记 高级JS注释 现在使用JavaScript 互动课程:关闭或关闭 学习AngularJS-这样的列表,但重点是AngularJS。 网站/博客 特定JavaScript NodeHispano 费内特 它们包括JavaScript,但不是特定的 ...
前面已经讲解了 引用,函数重载,作用域和上下文,接下来,讲解JavaScript中另一个重要的知识——闭包。
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 本例中,两个对象都指向同一个对象,当修改某一个对象的属性内容时,则会影响另一个。 我们再来看一个例子,这次我们利用数组来讲解引用: [Ctrl+A 全选 注:如需...
5、JS 计算网页内容的宽与高 (浏览器的标准模式与怪异模式) 237 6、JS设置与查看网页的解析模式(值) 249 7、JS判断对象是否已经存在 249 8、CSS设置网页在IE下为灰色显示 250 9、HTML A链接CSS样式 251 10、CSS...
对象是JavaScript的基础。从最基本的层次上说,对象是一系列属性的集合。
对前期JavaScript(前端的,ES3)的基础和中级中所学知识而写的代码的一个汇总。想借鉴的小伙伴欢迎参考。希望一起交流学习~~
学习js JavaScript是面向初学者,中级和高级的最大笔记本,涵盖各种主题和功能,以及一些通用算法,可帮助您立即在JavaScript中学习,理解和工作。
中级基础知识:承诺,获取者和设定者。 高级基础知识:代理,生成器。 DOM API:获取,交集,观察者,能见度变化,服务人员 TypeScript:简介,基本类型,函数,接口,类。 设计模式:什么是设计模式,设计模式...
它面向初学者,但是中级开发人员也可以享受创造新事物的乐趣。 本课程包括与DOM(文档对象模型)相关HTML,CSS和JavaScript的50个迷你项目。 以下是我们将在本课程中创建的内容的列表: 扩充卡 进度步骤 旋转导航...