论坛首页 Web前端技术论坛

javascript面向对象技术基础(四)

浏览 18184 次
精华帖 (4) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-16  
zhuxinyu 写道

希望能提供电子书下载,很好支持

自己从itpub论坛搜搜吧,不敢公开的给你提供.
0 请登录后投票
   发表时间:2008-12-16  
sdcyst 写道

zhuxinyu 写道
希望能提供电子书下载,很好支持自己从itpub论坛搜搜吧,不敢公开的给你提供.

我是说你可以用 javaeye 的博客导出功能将你的博客导出,挺喜欢写的好
0 请登录后投票
   发表时间:2008-12-17  
基礎學習很重要,不過的文章,置頂!!
0 请登录后投票
   发表时间:2008-12-19  
谢谢,我理解了,prototype就是js多态的根源
0 请登录后投票
   发表时间:2008-12-30  
是的 prototype 应该是仅有函数拥有的. 这个概念搞清楚就行了.

prototype中的属性跟对象实例的属性关系应该是个copy-on-write的东西. 除非修改了,要不就只会使用它的prototype属性.

温故而知新, 第二遍看,想详细研究prototype,又收获不少.
0 请登录后投票
   发表时间:2008-12-30  
对应lz的最后一个例子,很精彩,看完明白多了。

我个人感觉,通过对象Person.prototype.age来修改,是改了所有引用这个属性的值。而通过某个实例来改,如p1.age = 34 仅仅是覆盖了父类的方法,使之不依赖于父类了,这个引用的关系不存在了,所此p2的age属性没有被更改。
0 请登录后投票
   发表时间:2009-01-04  
hanjs 写道

对应lz的最后一个例子,很精彩,看完明白多了。

我个人感觉,通过对象Person.prototype.age来修改,是改了所有引用这个属性的值。而通过某个实例来改,如p1.age = 34 仅仅是覆盖了父类的方法,使之不依赖于父类了,这个引用的关系不存在了,所此p2的age属性没有被更改。


我想这个覆盖和子作用域覆盖掉父作用域的同名变量的值的道理是一个的,或差不多,可能我说的不太规范,大概就是这个意思。类似p1.age是给p1对象赋了一个属性age,“属于本身的东西总比别人的东西要近”,哈,我通俗点就这样理解,因此p1.age的优先级更高了。。
0 请登录后投票
   发表时间:2009-02-12  
hanjs 写道
对应lz的最后一个例子,很精彩,看完明白多了。

我个人感觉,通过对象Person.prototype.age来修改,是改了所有引用这个属性的值。而通过某个实例来改,如p1.age = 34 仅仅是覆盖了父类的方法,使之不依赖于父类了,这个引用的关系不存在了,所此p2的age属性没有被更改。

这样说来,和java的多态和继承就很像了,这样比喻起来更通俗些。谢谢
0 请登录后投票
   发表时间:2009-04-23  
问一个问题,使用var Person = function(name) {...}可以创建匿名函数,但是如果我想创建非匿名函数能不能这样写,看看下面的代码:

var p1 = function Person(name) {  // 这里我不想创建匿名函数
  this.name = name;
}
var p2 = Person;
alert(p1 == p2);      // --> false
alert(p1 == Person);  // --> false
不明白为什么?继续:

Case1:
Person.prototype.getName = function() {...};
new p2("John").getName();  // --> John
new p1("John").getName();  // getName is not a function!

Case2:
p1.prototype.getName = function() {...};
new p1("Anna").getName();  // --> Anna
new Person("Anna").getName();  // getName is not a function!

My Conclusion:
感觉var p1 = function Person(name) {...}分别创建了两个函数对象,等价于
var p1 = function(name) {...};
function Person(name) {...};

因此p1 == Person会是false
但是:
alert(new p1("John").constructor);     // --> function Person(name) {...}
alert(new Person("Anna").constructor); // --> function Person(name) {...}
这里又是一样的,因此p1不是一个匿名函数?

——不知道我这里说清楚了没有,这些代码都是在FF上试过的
0 请登录后投票
   发表时间:2009-05-09  
引用

var obj = {}; 
alert(obj.prototype);    // undefinded 

javascript的类是用函数来模拟的!应该这样才对!
var obj = new Function(); 
alert(obj.prototype);    // undefinded 
0 请登录后投票
论坛首页 Web前端技术版

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