JavaScript虽不是一门户严格意义上的面向对象语言

时间:2022-04-12 19:49:00
我们知道抽象在面向对象中的重要地位。
而JavaScript虽不是一门户严格意义上的面向对象语言,但,它也可以有自己的面向对象实现。
当然包括抽象。
在JavaScript中,虚方法可以看作该类中没有定义的方法,但已经通过this指针使用了.
通过下面的示例可以看出:
 1 JavaScript虽不是一门户严格意义上的面向对象语言var  tmp = function ()
 2 JavaScript虽不是一门户严格意义上的面向对象语言JavaScript虽不是一门户严格意义上的面向对象语言 {
 3JavaScript虽不是一门户严格意义上的面向对象语言JavaScript虽不是一门户严格意义上的面向对象语言  {
 4JavaScript虽不是一门户严格意义上的面向对象语言     this.ini.apply(this,arguments); 
 5JavaScript虽不是一门户严格意义上的面向对象语言   //这里的arguments是构造函数的
 6JavaScript虽不是一门户严格意义上的面向对象语言//this.ini通过this调用,但却是未定义的。
 7JavaScript虽不是一门户严格意义上的面向对象语言//将在其prototype中给出实现
 8JavaScript虽不是一门户严格意义上的面向对象语言  }

 9JavaScript虽不是一门户严格意义上的面向对象语言}

10 JavaScript虽不是一门户严格意义上的面向对象语言 // 实现虚方法 ini,且提供给构造函数调用
11 JavaScript虽不是一门户严格意义上的面向对象语言 tmp.prototype.ini = function ()
12 JavaScript虽不是一门户严格意义上的面向对象语言JavaScript虽不是一门户严格意义上的面向对象语言 {
13JavaScript虽不是一门户严格意义上的面向对象语言  alert(arguments[0]);
14JavaScript虽不是一门户严格意义上的面向对象语言}

15 JavaScript虽不是一门户严格意义上的面向对象语言 var  tt = new  tmp( ' a ' );

在prototype.js中,对抽象类及类的创建有一段经典的实现:
如下:
 1  var  Class =
 2  {
 3    create: function ()
 4    {
 5       return   function ()   // 返回一个匿名函数,也就是一个函数对象
 6      {      
 7          this .ini.apply( this ,arguments);   // 此时的arguments是函数对象的构造函数传递过来的参数对象
 8      }
 9    }
10  }
11 
12  var  tmp = Class.create();
13 
14  // 此时tmp相当于
15  // var tmp=function()
16  // {
17  //   this.ini.apply(this,arguments);
18  // }
19  // 可以通过alert(tmp.toString());看出
20  tmp.prototype.ini = function ()
21  {
22        alert(arguments.length);   // 这里的arguments是ini自身的参数
23  }
24  var  ttt = new  tmp( ' adf ' );

因为掉入了面向对象的泥潭,导致对Class.create居然久久不能明了
很汗,一个简单的返回匿名函数居然将我迷糊了很久。
因此如上代码记录在此,以作备忘
<h3>
   心静似高山流水不动,心清若巫峰雾气不沾。
</h3>