日期:2014-05-16  浏览次数:20310 次

类变量与prototype对象的变量有什么区别?
问题在代码中
JScript code

function Circle(){}
Circle.PI = 3.14;//(1)
Circle.prototype.PI = 3.14;//(2)
//我知道的区别
//(1)的PI不能给Circle的对象直接调用
//var c = new Circle(); c.PI undefined
//(2)的PI能给Circle的对象直接调用
//var c = new Circle(); c.PI == 3.14
//还有其他区别吗?



------解决方案--------------------
这里所有的function函数都是Function类的实例化

而 new function 又是function的实例化

所以你上面function Circle(){}
Circle.PI = 3.14;//(1) 对Circle对象,也就是Function类的实例化对象的一个属性而已
Circle.prototype.PI = 3.14;//(2)function 的原型增加一个属性 ,作用域原型生成的实例化对象都包含这个属性
------解决方案--------------------
Circle 是一个函数,javascript允许使用new 关键字来实例它,
每个函数都有一个属性prototype, prototype也是一个对象,当实例化一个函数var c = new Circle()时,会将 Circle函数的引用赋值给实例的constructor属性, 也就是所c.constructor 就是Cirlcle函数, 同时Cirlcle的protorype属性会赋值给实例属性,
------解决方案--------------------
探讨
@@,你说的那个先找实例,再找原型的我也明白,我现在问的是‘类变量’与prototype的区别,不是问实例变量与prototype的区别

------解决方案--------------------
探讨
function Circle(){}
Circle.PI = 3.14;//(1)
Circle.prototype.PI = 3.14;//(2)
function Circle(){}
Circle.PI = 3.14;//(1)
Circle.prototype.PI = 3.14;//(2)
//我知道的区别
//(1)的PI不能给Circle的对象直接调用
//var c = new Circle(); c.PI undefined
//(2)的PI能给Circle的对象直接调用
//var c = new Circle(); c.PI == 3.14
//还有其他区别吗?

------解决方案--------------------
LS正解
对于继承来说
function Circle(){}
Circle.PI = 3.14;

function test()
{
}
test.prototype = Circle;
var _test=new test();
alert(_test.PI); 这个是可以的,已测


Circle是他本身的默认实例化对象,这个还真不知道,学习了


------解决方案--------------------
探讨
原理就是:Circle不仅是一个类,也是这个类的一个默认实例化对象.Circle和其它再new出来的实例是兄弟关系(或者说是月饼和月饼的关系),并非父子关系(或者说并非是月饼模子和月饼的关系)

------解决方案--------------------
探讨

引用:
原理就是:Circle不仅是一个类,也是这个类的一个默认实例化对象.Circle和其它再new出来的实例是兄弟关系(或者说是月饼和月饼的关系),并非父子关系(或者说并非是月饼模子和月饼的关系)


Circle和其它再new出来的实例是兄弟关系
-----------

这个值得商榷。因为Circle和new出来的实例的模子不同,Circle的模子是Fu……