论坛首页 Web前端技术论坛

javascript 原型函数 prototype 工作原理

浏览 10464 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-11-15  
windlike 写道
不看懂        


什么意思呢?帅哥。。
0 请登录后投票
   发表时间:2011-11-15  
"上述代码是在没有构造函数的情况下,如果存在构造函数"这什么意思,你应该说构造函数没有成员属性,和成员函数,而不能说没有构造函数,搞技术的用词要准确,不然别人会看不懂的
0 请登录后投票
   发表时间:2011-11-15  
曾经在这个所谓的原型上面迷失过好久,后来,突然有一天我恍然大悟!
0 请登录后投票
   发表时间:2011-11-15  
dingchao.lonton 写道
"上述代码是在没有构造函数的情况下,如果存在构造函数"这什么意思,你应该说构造函数没有成员属性,和成员函数,而不能说没有构造函数,搞技术的用词要准确,不然别人会看不懂的


对的,是这个意思,谢谢你的指出。
已经做出更改 :)
0 请登录后投票
   发表时间:2011-11-15  
总结的还是很好的,成都小伙,顶一个
0 请登录后投票
   发表时间:2011-11-16  
讲的太复杂
0 请登录后投票
   发表时间:2011-11-18  
呵呵,怎么和昨天晚上看的JavaScript高级程序设计 很相似了。
0 请登录后投票
   发表时间:2011-11-18  
firefly_zp 写道
泰山宏图 写道
lz12366 写道
如果这么说的话
Fruit.prototype.constructor=People.prototype.constructor;
新定义一个function,这样再创建Fruit实例,按上面说的话应该不会再指向Fruit的构造函数了吧??

上述为指针赋值,就像“光棍节”与“11月11号”一样,是对同一个日子不同的称呼,
Fruit.prototype.constructor=People.prototype.constructor = "&构造函数";
那么下面的说法应该没错吧:
Fruit实例的构造函数是 "&构造函数",People实例的构造函数是"&构造函数"。


是这个意思。
但是在使用 prototype 的时候一共有两种方法,一种方法就如上面所示,Fruit.prototype.xxx = "xxx";就可以。
第二种是通过字面量来声明的,即

function Fruit(){
		}
			
Fruit.prototype = {
	category :"apple" ,
	price : 19.9 ,
	showPrice : function(){
		alert(price);
		}
	}
			
var fruit = new Fruit();
alert(fruit.constructor == Fruit); // false
alert(fruit.constructor == Object); // true


很奇怪的一点是,fruit.constructor == Fruit() 的输出false,不再是 true 了。这是因为本质上我们已经重写了默认的 prototype 对象,因此 constructor 属性所指向的内容也就变成了新对象的 constructor 属性,而这个属性指向的是 Object 构造函数。

可以通过增加一句话来定义 constructor。

function Fruit(){
		}
			
Fruit.prototype = {
	constructor:Fruit ,
	category :"apple" ,
	price : 19.9 ,
	showPrice : function(){
		alert(price);
		}
	}
			
var fruit = new Fruit();
alert(fruit.constructor == Fruit); // true
alert(fruit.constructor == Object); //false

显示的声明 constructor 就可以让它知道所指的构造函数。


在上面的代码最后分别加入alert(fruit.construc);alert(Fruit);
相信你会看出区别来的。
0 请登录后投票
   发表时间:2011-12-02  
一句话解决

javascript绝大多数函数都有一个prototype property,而它有一个constructor property, 指向了函数本身。
0 请登录后投票
   发表时间:2011-12-26  
__proto__ 这个属性只在GECKO内核(FF)下面才能看到,而其他内核(trident,webkit)的浏览器是不可见的。
0 请登录后投票
论坛首页 Web前端技术版

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