分享

博客园 - 鸟食轩 - JScript中的prototype(原型)属性研究(1)

 weicat 2006-03-23

JScript中的prototype(原型)属性研究(1)

    我们知道JScript中对象的prototype属性,是用来返回对象类型原型的引用的。我们使用prototype属性提供对象的类的一组基本功能。并且对象的新实例会"继承"赋予该对象原型的操作。但是这个prototype到底是怎么实现和被管理的呢?

    对于对象的prototype属性的说明,JScript手册上如是说:所有 JScript 内部对象都有只读的 prototype 属性。可以向其原型中动态添加功能(属性和方法),但该对象不能被赋予不同的原型。然而,用户定义的对象可以被赋给新的原型。

    下面我们看三个经典的prototype属性的使用示例。

    1、为脚本环境内建对象添加方法:

 Array.prototype.max = function()
 {
     
var i, max = this[0];
     
for (i = 1; i < this.length; i++)
     {
       
if (max < this[i])
        max 
= this[i];
     }
    
return max;
 };

    2、为用户自定义类添加方法:
 function TestObject(name)
 {
     
this.m_Name = name;
 }

 TestObject.prototype.ShowName 
= function()
 {
     alert(
this.m_Name);
 };

    3、更新自定义类的prototype:
 function TestObjectA()
 {
    
this.MethodA = function()
    {
       alert(‘TestObjectA.MethodA()‘);
    }
 }

 
function TestObjectB()
 {
    
this.MethodB = function()
    {
       alert(‘TestObjectB.MethodB()‘);
    }
 }

 TestObjectB.prototype 
= new TestObjectA();

    第三个很眼熟吧?对啊,它就是我们前面介绍的原型继承法呀~~ 不过今天我们不是研究"继承",之所以可以这样来实现一种继承,只是利用了prototype属性的一个副作用而已。

    prototype还有一个默认的属性:constructor,是用来表示创建对象的函数的(即我们OOP里说的构造函数)。constructor属性是所有具有prototype属性的对象的成员。它们包括除Global和Math对象以外的所有JScript内部对象。constructor属性保存了对构造特定对象实例的函数的引用。

    弄清楚了JScript中prototype属性怎么使用后,下面我们再来深入的研究它。

posted on 2005-02-17 22:59 birdshome 阅读(7091) 评论(6)  编辑 收藏 收藏至365Key 所属分类: JScript&DHTML开发

评论

# re: JScript中的prototype(原型)属性研究(1)  回复   

晕,我正看着下面要怎么写呢。敲一下回车就提交了。
不好意思,请删除。
说说对第三种的看法:

个人认为这样写不是很方便。^_^

还不如:

function TestObjectA()
{
this.MethodA = function()
{
alert(‘TestObjectA.MethodA()‘);
}
this.MethodB = function()
{
alert(‘TestObjectB.MethodB()‘);
}
}

可能是我喜欢使用js的动态性的原因吧!
像第三种一定得加上TestObjectB.prototype = new TestObjectA();
这样很不方便。
我觉得还不如在某些不需要MethodA 的地方加上delete。这样就很像virtual了。
比如:
<script>
function A(){
this.a = function(){
alert("asdf");
}
this.b = function(){
alert("ttt");
}
}
var a = new A();
for(var item in a) a[item]();
delete a.a;
for(var item in a) a[item]();
</script>
这样可以想覆盖就覆盖,想删除就删除,想使用就使用。
2005-02-18 03:43 | 辣妹子

# re: JScript中的prototype(原型)属性研究(1)  回复   

这个主题专讲prototype,例三只是说明用户可以覆盖自定"类"的prototype而已。谢谢你的意见,不过好像更适合JS的OOP这样的讨论哦。
2005-02-18 10:13 | birdshome

# re: JScript中的prototype(原型)属性研究(1)  回复   

"3、更新自定义类的prototype:"
这个傻了吧? 不是也用了this.methodxx = xx了么?
写东西要统一
2005-03-13 13:07 | xx

# re: JScript中的prototype(原型)属性研究(1)  回复   

@xx
这个和第2个一样吗?你理解的是什么?
2005-03-13 13:29 | birdshome

# re: JScript中的prototype(原型)属性研究(1)  回复   

好好利用prototype是我的目标。谢谢楼主的讲解,真是令人茅塞顿开!
2005-07-19 19:27 | 轩辕剑

# re: JScript中的prototype(原型)属性研究(1)  回复   

谢谢楼主的讲解 真透彻
2005-11-23 14:11 | 大飞

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多