这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
在 JavaScript 中并没有类的概念,但 JavaScript 中的确可以实现重载,多态,继承。这些实现其实方法都可以用 JavaScript 中的引用和变量作用域结合 prototype 来解释。
1、prototype在 JavaScript 中并没有类的概念,但 JavaScript 中的确可以实现重载,多态,继承。这些实现其实方法都可以用 JavaScript 中的引用和变量作用域结合 prototype 来解释。
2、简单的例子
- var Blog = function( name, url ){
- this.name = name;
- this.url = url;
- };
- Blog.prototype.jumpurl = '';
- Blog.prototype.jump = function(){
- window.location = this.jumpurl;
- };
- /*
- *等同于
- Blog.prototype = {
- jumpurl : '',
- jump : function(){
- window.location = this.jumpurl;
- }
- };
- */
- var rainman = new Blog('jb51', 'http://www.phperz.com');
- var test = new Blog('server', 'http://s.phperz.com');
这是一个非常简单的例子,但却可以很好的解释 prototype 内在的一些东西,先看下图的内存分配:
通过上图可以看到下面这些内容:prototype 只是函数的一个属性,该属性的类型是一个对象。 内存分配状况: 函数 Blog 拥有一个 prototype 属性,而 prototype 属性拥有一个变量和一个函数; test 和 rainman 两个变量都分别有 name 和 url 两个变量; test 和 rainman 两个变量都有一个 jumpUrl 变量和一个 jump 函数,但是并没有分配内存,它们是对 Blog.protype 中的引用
3、扩展 1:
- website.prototype = Blog.prototype
- var Blog = function( name, url ){
- this.name = name;
- this.url = blogurl;
- };
- Blog.prototype.jumpurl = '';
- Blog.prototype.jump = function(){
- window.location = this.jumpurl;
- };
- var rainman = new Blog('jb51', 'http://www.phperz.com');
- var test = new Blog('server', 'http://s.phperz.com');
- var Website = function(){};
- Website.prototype = Blog.prototype;
- var mysite = new Website();
通过上图可以看到下面这些内容: "Website.prototype = Blog.prototype;":Website 的 prototype 并没有分配内存,只是引用了 Blog 的 prototype 属性。 mysite 的两个属性也没有分配内存,也只是分别引用了 Blog.prototype.jumpurl 和 Blog.prototype.jump
4、扩展 2:通过上图可以看到下面这些内容:
- Website.prototype = new Blog()
- var Blog = function(){};
- Blog.prototype.jumpurl = '';
- Blog.prototype.jump = function(){
- window.location = this.jumpurl;
- };
- var Website = function(){};
- Website.prototype = new Blog();
- var mysite = new Website();
Website 的 prototype 属性,只是 Blog 的一个实例( 同 rainman=new Blog(); ); 因此 Website 的 prototype 属性就具有了 jumpurl 变量和 jump 方法了。 mysite 是 Website 的一个实例,它的 jumpurl 和 jump 方法是继承自 Website 的 prototype,而 Web.prototype 继承自 Blog.prototype(这里与其说是继承,不如说是引用) 整段程序在运行的过程中,内存中只分配了一个 jumpurl 变量和一个 jump 方法
5、new 运算符JavaScript 中 new 运算符。 JavaScript 中 new 运算符是创建一个新对象。使用方法: new constructor[(arguments)] 其中 constructor 是必选项。对象的构造函数。如果构造函数没有参数,则可以省略圆括号。 arguments 是可选项。任意传递给新对象构造函数的参数。 JavaScript 中 new 运算符说明 new 运算符执行下面的任务: 创建一个没有成员的对象。 为那个对象调用构造函数,传递一个指针给新创建的对象作为 this 指针。 然后构造函数根据传递给它的参数初始化该对象。 示例 下面这些是有效的 new 运算符的用法例子。 my_object = new Object; my_array = new Array(); my_date = new Date("Jan 5 1996");
6、其它在绝大多数 JavaScript 版本中,JS 引擎都会给每个函数一个空的原型对象,即 prototype 属性。
来源: http://www.phperz.com/article/17/0422/285134.html