用javascript的事件也不短了,,,但总是停留在一些基础简单的应用之中,对于js里面的高级特性却知之甚少,虽然一直都知道js的面向对象(当然也有叫基于对象的),那说明里面对于对象的操作那是重头戏,但我却对这样的特性可以说的一直很迷茫的状态,,,别看我是学着 用着java编程,,,但是到js这里,,好像都不起作用了。。别的不多说,,,下面开始js 的面向对象的一些看法 都是从学习中自己的认识,,,有错误之处敬请指正,,,
js的面向对象 基本上就是 对函数 function的增加了一层华丽的外衣,,,在我们根深蒂固的方法学说里,根本不会把这样的情况和对象有什么联系的,,,但在就是里,,,它有着深藏不露的本事,我们经常都是创建某某方法然后简单的调用之后 ,,,好像就没有什么下一步的动作,,,也是基于问题的复杂程度而言,我也没有系统的使用过js的这些特性,但是既然学习了js了,,那么就要熟悉它的每一个特性,,,感受它的伟大,,,更重要的是给我们开发带来便利,。,。这就是所用程序员们追求的终极目标啊,,,
对于js面向对象,,,我想从 面向对象的基本特性 来说 封装 继承 多态,,,那么对于类的概念 在js中就是没有的,,,这也可以说是一个优点,,,可以有更好的动态特性,,,,它的一般形式
function func(){ } 这是我,们在熟悉不过的了。。。这个 可以说 函数,,, 我们可以叫做构造器。。。
(哈哈 我怎么想起了c++中的构造器了呢,,,飘过)在这个函数的外面我们看不出什么。。。又给我们说的面向对象有什么关系。。。。就继承来说,,,通常有父类 子类,,,这样的形式,,,在js是如何去表现了。。。
首先要明白 原型 和构造器的概念,,,因为它们才是首先继承的关键因素,,,
其实说 原型,,,貌似没有用到过 好像不曾存在过一样,,,对于一般的操作 原型的存在就像是多余的一样,,,因为根本用不到它,,,但是原型的力量是不可小觑的,,,,
函数的原型是什么呢,,,我们可以通过 alert(func.proptotype)方式得到,,,对 是object 它又有什么用呢,,,是的 就现在而言 看似没有什么实质性的用处,,,慢慢看,,,
我们继续看它的构造器是什么呢 alert(func.prototype.constructor) 是function func(){} 函数原型的构造器指向的是函数本身。。。 有点意思呢,,,
那么跟我们的继承有什么关系呢。。。下面继续。。。
函数原型是一个对象,,,这个对象是不是不唯一的,,,我们看那弹出的原型是一个object 那么只要是object类型的 那就可以是一个原型了,,,那么我可以这样
function father(){}
function son(){}
var f=new father();
son.prototype=f;
这样不就可以了么、、、
恩 想法很好 我也是这样的想的 。。。但是这样做是不对的。。。
这样的话 可以实现 把son的原型修改为father 但同时 我们可以发现一点
贴代码 自己验证下
紧跟上面的
var ff=new father();
var ss=new son();
alert(ff.constructor===ss.constructor)//true
这样就会出现重大问题 这个原型链断开了,,
首先我们在实现原型继承的同时 也要保持本身的构造器能够继续存在,,,
然后在执行了之后。。。。本身的构造器被新的原型所替代,,,
那样这是我们不允许出现的情况,,,
我们需要的是 在不影响自身构造器的情况下进行原型的继承动作针对上面的代码我们要做一下改动
function father(){this.constructor=arguments,callee;}
function son(){this.constructor=arguments.callee;}
var f=new father();
son.prototype=f;
var ff=new father();
var ss=new son();
alert(ff.constructor==ss.constructor)//false
看看结果显示了什么。。。恩 看似很好的一个结果
这样我们既解决了原型继承 。。。还解决了构造器的问题。。。
js里面的知识真是太多了。。。。真的是需要静下心来慢慢的去认识 学习 在认识 在学习的过程