jquery 部分代码:jQuery.cache = function(name, value) {
try{
return window.parent.jQuery.cache(name, value);
}catch(e){
return "";
}
};我的理解红字部分是给jquery对象扩充了一个新属性cache,这样我们可以通过引用这个属性来达到我们的要求
Date.prototype.format = function(format) {
var defaults = {
"y+" : this.getFullYear(),
"M+" : this.getMonth()+1,
"d+" : this.getDate(),
"h+" : this.getHours(),
"m+" : this.getMinutes(),
"s+" : this.getSeconds(),
"S" : this.getMilliseconds()
};
var param,value;
for(var n in defaults){
if(new RegExp("("+ n +")").test(format)){
param = RegExp.$1;
value = ""+defaults[n];
if(value.length===1){value="0"+value;}
if(param.length===1 && value.length<=2){value="0"+ value;}
format = format.replace(param, value);
}
}
return format;
}
蓝字部分,Date.prototype.format ,我的理解是给Date对象扩充了新的属性format通过比较我发现,我在想,能不能把Date.prototype.format 改成Date.format 哦?就是取消中间的prototype我通过实验发现,好象是不可以,但是为什么红字部分可以哦?
try{
return window.parent.jQuery.cache(name, value);
}catch(e){
return "";
}
};我的理解红字部分是给jquery对象扩充了一个新属性cache,这样我们可以通过引用这个属性来达到我们的要求
Date.prototype.format = function(format) {
var defaults = {
"y+" : this.getFullYear(),
"M+" : this.getMonth()+1,
"d+" : this.getDate(),
"h+" : this.getHours(),
"m+" : this.getMinutes(),
"s+" : this.getSeconds(),
"S" : this.getMilliseconds()
};
var param,value;
for(var n in defaults){
if(new RegExp("("+ n +")").test(format)){
param = RegExp.$1;
value = ""+defaults[n];
if(value.length===1){value="0"+value;}
if(param.length===1 && value.length<=2){value="0"+ value;}
format = format.replace(param, value);
}
}
return format;
}
蓝字部分,Date.prototype.format ,我的理解是给Date对象扩充了新的属性format通过比较我发现,我在想,能不能把Date.prototype.format 改成Date.format 哦?就是取消中间的prototype我通过实验发现,好象是不可以,但是为什么红字部分可以哦?
解决方案 »
- 关于JS文件中调用文件路径问题
- ext 缺少对象,我用的是ext2.2.求助
- 大家来推荐下javascript,ajax书籍
- 一张图片多个独立的图片
- 怎么手动设置文本框输入的内容到COOKIE中,就是说下次点文本框时就会下拉列出上次输入的内容
- 请问如何周期性的读取js文件?谢谢您
- 如何使用javascript将某网址写入客户端,感谢!
- 动态JS,挑战你的技术!
- 框架问题:在线等待!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 高分求一程序!!!!!!!!
- 请教高手,用js动态增加option时,如何增加空格的value和text?
- 如何给BBSXP的BBCODE添加[H1]格式或者换tiny_mce编辑器?
我不用jQuery,不过猜测用jQuery的时候应该是直接用jQuery.cache()吧,肯定不是new jQuery().cache()。要这样用肯定也是找不到的。
Date类就不一样了,你要用的时候肯定是new Date()生成一个对象,再调用对象的方法,所以必须加在prototype里。
这是一个JavaScript的基础问题,JS是我们常用的语言中唯一使用原型式继承的语言。当new一个对象的时候所有方法都继承自类的原型(即prototype)。所以想要在对象里找到新定义的方法,就必须修改prototype。
而jQuery.cache = function()这样语法是没有问题的,不过表达的完全是另一回事,这个时候jQuery更像是一个命名空间(实际是一个对象)。
jQuery.cache = function(name, value) {}
是在jQuery命名空间上增加新的属性?我这样理解对吗?
lz可以参考下3楼的见解。
另外prototype是JS的特色。可以把它理解为对原型对象(或者说父类、超类)的引用。之所以需要prototype,可以理解为Date是已封装的构造函数。要从外部定义它内部的东西,必须用prototype。而且这种定义,会影响所有通过new Date()声明出来的对象。而你的想法,去掉prototype。那样的话就变成试图从构造函数{}外部去直接定义构造函数{}内部的方法。所以如果非要去掉,应该是对实例化之后的Date。影响范围也仅限于该实例。即:var ddd=new Date();ddd.format=function(format){....}
至于Jquery,本身是在用户端自定义的。和你的重写功能的代码在同一层。所以可以不用prototype直接写。
这些只是我的理解,对错不敢肯定。也没有做过测试验证。
lz既然研究,不如多点散发。
再试试别的组合,如
测试JQuery.cache加上prototype看看。
测试prototype的作用:
var d=new Date();
Date.prototype.format=function(){alert("old");};
var dd=new Date();
var ddd=new Date();
ddd.format=function(){alert(new);};d.format();
dd.format();
ddd.format();
{
this.color = sColor;
this.showcolor = function () {
alert(this.color)
};
}
这是个构造函数,我可以car.showcolor= function(){ alert("over write")}吧?
但这样new时每个对象都创建了独立的函数版本(showcolor).这个跟jQuery.cache = function(name, value) { }应该是一个道理吧?
如果用原型方式加构造就应该这样
function car(sColor)
{
this.color = sColor;
}
car.prototype.showcolor = function () {
alert(this.color)};//函数属性只创建一次。(书上说的)当然你也可以重写这个原型函数:
car.prototype.showcolor = function () {alert("重写")};
其实楼主问的问题就是为什么不能直接car.showcolor = function (){alert(this.color)};其实感觉是对的呀。 我感觉是不是Date.prototype.format已经存在,所以你不可以用Date.format去重写呢??
我也是提问啊!高手指点下