prototype属性的使用,为何会出错呢?初级代码 <script type="text/javascript">
var d =new Date();
//d.prototype.tmp="新属性" //这一句为何出错,可是下面这一句就正确呢?
Date.prototype.tmp="新属性";
alert(d.toLocaleDateString());
alert(d.tmp);
</script>
为何会这样呢?
实例化后的对象,为何不能用这个属性呢?
难道这个属性,只能用内置对象来调用吗?
好象只有两个内置对象呀。一个Date,一个Global,
是不是只有这两个对象才能使用 prototype 属性呀?
var d =new Date();
//d.prototype.tmp="新属性" //这一句为何出错,可是下面这一句就正确呢?
Date.prototype.tmp="新属性";
alert(d.toLocaleDateString());
alert(d.tmp);
</script>
为何会这样呢?
实例化后的对象,为何不能用这个属性呢?
难道这个属性,只能用内置对象来调用吗?
好象只有两个内置对象呀。一个Date,一个Global,
是不是只有这两个对象才能使用 prototype 属性呀?
var d = new Date();
d.constructor.prototype.tmp="新属性" //这一句为何出错,可是下面这一句就正确呢?
Date.prototype.tmp="新属性";
alert(d.toLocaleDateString());
alert(d.tmp);
</script>
Date是JS内置的时间类—可以想象为一个没有new操作的构造函数,当然可以在原型上添加属性。
我理解,这难在JS的“一切皆对象,是对象都有原型”的概念,是中文词汇“对象”表述出问题。
是的,String、Number、Array、Object、Function等都是对象,它们都有原型(prototype),但是"xxx"、3、[]、{}、function(){}等一一分类继承前者但不等于前者。前者是类,后者是实例。
一个类可以衍生出千千万万实例,假设实例都有原型的话就有数不清的prototype,都从什么地方继承来的?继承的模板(prototype)唯独一个!
对象String、Number、Array、Object、Function等有prototype,而实例"xxxx"、3、[]、{}、function(){}都没有(也不能够有)prototype。
如:function(){}就没有prototye,只能function(){}.constructor在prototype上添加属性,来给所有函数实例继承。实际上,function(){}.constructor就是Function,d.constructor就是String。
通俗说,"hgjhj"是字符串对象,但不等于说是String对象,此对象非彼对象。
唉,说着说着连自己都绕进去了,它NND ......
具有了这样的特性,刚定义没有运行的函数既是Function的实例,又实际上构造了一个JS类。
<script type="text/javascript">
var foo=function(){};
foo.prototype.temp="新属性";
alert(new foo().temp);
</script>
var d =new Date();
//d.prototype.tmp="新属性" //这一句为何出错,可是下面这一句就正确呢?
Date.prototype.tmp="新属性";
alert(d.toLocaleDateString());
alert(d.tmp);
</script>prototype应该是Function对象拥有的。因为d不是一个Function,它是一个实例,所以它没有prototype
而Date可以说是一个Function,所以Date有prototype
Object,String Date ==都拥有............. var d =new Date();
//d.prototype.tmp="新属性" //这一句为何出错,可是下面这一句就正确呢?
Date.prototype.tmp="新属性";
alert(d.toLocaleDateString());
alert(d.tmp);至于这句为什么报错d是new Date()的实例 d本身是不带prototype这个属性的 会查找到Date.prototype.prototype.tmp
这个属性是找不到的 肯定会报告错误这么写就不会报告错误了
Date.prototype.prototype={}
var d =new Date();
//d.prototype.tmp="新属性" //这一句为何出错,可是下面这一句就正确呢?
Date.prototype.tmp="新属性";
alert(d.toLocaleDateString());
alert(d.tmp);
undefined.tmp肯定出错咯
var d = new Date();
d.prototype.tmp="新属性"//错误
d.constructor.prototype.tmp="新属性" //正确
// Date.prototype.tmp = "新属性"; //正确
alert(d.toLocaleDateString());
alert(d.tmp);