今天闲来无聊,回顾知识点,记忆告诉自己,prototype 是能动态给js的对象添加属性和函数的。
写了一个小例子。居然没调通。我老郁闷啦。
eg:
心想应该分别输出 “b” 和 “c”
结果两次输出都是“b”。仔细看着这简单的脚本似乎没有任何错误,看久了我想起一句话,prototype 是动态追加。 于是我在想,动态追加,是否应该该成这样呢。
这次修改后,输出的结果和自己想的是一致的,以至于不再否认人生了。。。(夸张了点 )
总结如下。
1.在类的基础或者说原生已有的情况下,prototype是不能覆盖的,他的功能是追加,扩展。(当然自然让我们想到继承,不错,这个思路是对的。)
2.如果同时动态增加的属性或者方法,prototype是能覆盖掉的。(我不能空口下结论,给个小脚本如下。)
写了一个小例子。居然没调通。我老郁闷啦。
eg:
function
MyObject(t)
{
this .name = t;
}
MyObject.prototype.writeName = function ()
{
return this .name;
}
var myobj1 = new MyObject( " b " );
alert(myobj1.writeName());
MyObject.prototype.name = " c " ;
alert(myobj1.writeName());
{
this .name = t;
}
MyObject.prototype.writeName = function ()
{
return this .name;
}
var myobj1 = new MyObject( " b " );
alert(myobj1.writeName());
MyObject.prototype.name = " c " ;
alert(myobj1.writeName());
心想应该分别输出 “b” 和 “c”
结果两次输出都是“b”。仔细看着这简单的脚本似乎没有任何错误,看久了我想起一句话,prototype 是动态追加。 于是我在想,动态追加,是否应该该成这样呢。
function
MyObject(t)
{
this .size = t;
}
MyObject.prototype.writeName = function ()
{
return this .name;
}
MyObject.prototype.name = " b " ;
var myobj1 = new MyObject( " b " );
alert(myobj1.writeName());
MyObject.prototype.name = " c " ;
alert(myobj1.writeName());
{
this .size = t;
}
MyObject.prototype.writeName = function ()
{
return this .name;
}
MyObject.prototype.name = " b " ;
var myobj1 = new MyObject( " b " );
alert(myobj1.writeName());
MyObject.prototype.name = " c " ;
alert(myobj1.writeName());
这次修改后,输出的结果和自己想的是一致的,以至于不再否认人生了。。。(夸张了点 )
总结如下。
1.在类的基础或者说原生已有的情况下,prototype是不能覆盖的,他的功能是追加,扩展。(当然自然让我们想到继承,不错,这个思路是对的。)
2.如果同时动态增加的属性或者方法,prototype是能覆盖掉的。(我不能空口下结论,给个小脚本如下。)
function
MyObject(t)
{
this .size = t;
}
MyObject.prototype.writeName = function ()
{
return this .name;
}
MyObject.prototype.name = " b " ;
var myobj1 = new MyObject( " b " );
alert(myobj1.writeName());
MyObject.prototype.name = " c " ;
alert(myobj1.writeName());
MyObject.prototype.name = " d " ;
alert(myobj1.writeName());
{
this .size = t;
}
MyObject.prototype.writeName = function ()
{
return this .name;
}
MyObject.prototype.name = " b " ;
var myobj1 = new MyObject( " b " );
alert(myobj1.writeName());
MyObject.prototype.name = " c " ;
alert(myobj1.writeName());
MyObject.prototype.name = " d " ;
alert(myobj1.writeName());