论坛首页 Web前端技术论坛

领悟 JavaScript 中的面向对象

浏览 95884 次
该帖已经被评为良好帖
作者 正文
   发表时间:2008-01-28  
我是从ASP.NET 的 AJAX 框架学到这种方法的,我感觉用JAVA来做和用.NET来做都差不多,反正客户端的JAVASCRIPT是省不掉的,大家都得用相同的方式来操作对象
0 请登录后投票
   发表时间:2008-02-04  
very good
0 请登录后投票
   发表时间:2008-02-08  
如果asm是application的老祖,那么js就是web world的生产力.再怎么探索,研究都是不过分的. 挺欣赏作者这样行文流水的文笔,难得的好的技术文章.
0 请登录后投票
   发表时间:2008-02-19  
mudong 写道
嗯 看完之后确实很受益 谢谢楼主
不过我发现一个问题
func.name = “I am func.”;
alert(func.name);

打印出来的是 func 而不是“I am func.”
属性换个名字就可以 比如换成 name1

还有
   1. func.prototype.name=”prototype of func”; 
   2. var f = new func(); 
   3. alert(f.name); 

这个就可以打印出”prototype of func”

各位大人解释一下这是为什么呢?




在这里可以把 func理解成一个对象,f也是一个对象。两个是独立的。 对于func这个对象 他的name属性是func,即
func.name=func  。对于f变量  它是由 func()函数构造的,在这个构造函数中,把func对象的prototype所有属性值拷贝到 f变量中。  
0 请登录后投票
   发表时间:2008-02-24  
写的不错  我回去试试看看还有什么问题
0 请登录后投票
   发表时间:2008-02-26  
jonson 说的好像是对的,我是这么理解的~~
我是看了这个文章才明白的
还有达人要来补充一下么?
0 请登录后投票
   发表时间:2008-02-27  
自己补充一下,好像说的拷贝是不是有问题,实际是根据 prototype chain来找到的?     而var f = new func() 得到的f ,这个对象的prototype没有赋值,是默认的undefined(null)~~
那么应该是根据 xieye 的指点,从它的构造函数的prototpye chain 开始找,而不是自己的?
而构造函数的关联,是不是通过constructor 属性?

都是猜测,抛砖引玉,希望高人来解答~~
0 请登录后投票
   发表时间:2008-02-27  
不错 不错 写的非常的有特色...
0 请登录后投票
   发表时间:2008-02-28  
   var o= {}; // 我发现了一个东西。
o.eat = function(){return "I am eating."};  // 我发现它会吃;
o.sleep = function(){return "ZZZzzz..."} ; // 我发现它会睡;
o.talk = function(){return "Hi!"}; // 我发现它会说话;
o.think = function(){return "Hmmm..."}; // 我发现它还会思考。

var Human = new Function(); // 我决定给它起名叫“人”。
Human.prototype = o; // 这个东西就代表了所有“人”的概念。


var h = new Human(); // 当我发现其他同它一样的东西,
o.talk=function(){return "changed!"};
alert(h.talk());
结果显示是changed

Human.i=3;
h=new Human();
alert(h.i);结果是undifined
学习一番后结论就是:原型是引用自上层函数可以一直追溯到object的原型,而非原型的部分是由上层函数的构造函数copy至当前函数。


有意思的是
Function Human()
{
this.i=3;
}
用alert(Human.i)居然访问不到
而 alert(new Human().i)则可以

以function f()
{
this.test1=1;
}
f.test2=2;
f.prototype.test3=3;
ff= new f();
为例
所以对象函数f应该分为3个部分,分别是test1,test2,test3。
ff没有构造函数,ff.test1=1;并且ff.prototype.test3=3;而test2的数据无法取到了。


初学者看了这篇之后找了一些资料得出的结论,不知道对不对,请指教。
0 请登录后投票
   发表时间:2008-03-04  
zengsun 写道
楼主注意!!!
Javascript是基于对象的语言!不是面向对象的语言!!!
Javascript没有明确的类的概念,但可以模拟。


你这种观点可能要改改,为什么说不是面向对象呢?面向对象的三个特征:封装,多态,继承,js都表现出来了,那不是面向对象是什么呢?
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics