js中String.prototype.format類似于.net中的string.formitz效果

String.prototype.format = function(args) {
if (arguments.length>0) {
var result = this;
if (arguments.length == 1 && typeof (args) == "object") {
for (var key in args) {
var reg=new RegExp ("({"+key+"})","g");
result = result.replace(reg, args[key]);
}
}
else {
for (var i = 0; i < arguments.length; i++) {
if(arguments[i]==undefined)
{
return "";
}
else
{
var reg=new RegExp ("({["+i+"]})","g");
result = result.replace(reg, arguments[i]);
}
}
}
return result;
}
else {
return this;
}
}

例:

复制代码 代码如下:

//两种调用方式
var template1="我是{0},今年{1}了";
var template2="我是{name},今年{age}了";
var result1=template1.format("loogn",22);
var result2=template1.format({name:"loogn",age:22});
//两个结果都是"我是loogn,今年22了"

JavaScript是基于对象的,任何元素都可以看成对象。然而,类型和对象是不同的。

本文中,我们除了讨论类型和对象的一些特点之外,更重要的是研究如何写出好的并且利于重用的类型。毕竟,JavaScript这种流行的脚本语言如果能够进行良好的封装,并形成一个庞大的类型库,对于重用是非常有意义的。
网上对于prototype的文章很多,一直没明白核心的思想。最后写了很多例子代码后才明白:prototype只能用在类型上。
以下是一些关于类型和对象的例子,大家看完例子后可能更容易理解类型和对象之间的联系:

1  使用proptotype为类型添加行为

Object.prototype.Property = 1;Object.prototype.Method = function (){    alert(1);};var obj = new Object();alert(obj.Property);obj.Method(); 

可以在类型上使用proptotype来为类型添加行为。这些行为只能在类型的实例上体现。 在实例上不能使用prototype,否则发生编译错误 .

JS中允许的类型有Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String

2  为类型定义“静态”的属性和方法

Object.Property = 1;Object.Method = function(){    alert(1);}alert(Object.Property);Object.Method(); 

可以为类型定义“静态”的属性和方法,直接在类型上调用即可 ,实例不能调用类型的静态属性或方法,否则发生对象未定义的错误。

3  JavaScript中定义一个类型

function Aclass()
{
    this.Property = 1;
    this.Method = function()
    {
        alert(1);
    }
}
var obj = new Aclass();
alert(obj.Property);
obj.Method();

这个例子演示了通常的在JavaScript中定义一个类型的方法

4  使用prototype为自定义的类型增加属性和方法

[折叠代码]

function Aclass() { this.Property = 1; this.Method = function() { alert(1); } } Aclass.prototype.Property2 = 2; Aclass.prototype.Method2 = function() { alert(2); } var obj = new Aclass(); alert(obj.Property2); obj.Method2();

[折叠代码]

可以在外部使用prototype为自定义的类型添加属性和方法。 在外部不能通过prototype改变已有的自定义类型的属性或方法

5  在对象上改变已有的类型的属性和方法

[折叠代码]

function Aclass() { this.Property = 1; this.Method = function() { alert(1); } } var obj = new Aclass(); obj.Property = 2; obj.Method = function() { alert(2); } alert(obj.Property); obj.Method();

[折叠代码]

但可以在对象上改变已有的属性。(这个是肯定的),也可以在对象上改变已有的方法。(和普遍的面向对象的概念不同)

6   在对象上增加属性或方法

[折叠代码]

function Aclass() { this.Property = 1; this.Method = function() { alert(1); } } var obj = new Aclass(); obj.Property2 = 2; obj.Method2 = function() { alert(2); } alert(obj.Property2); obj.Method2();

[折叠代码]

还可以在对象上增加属性或方法

7 类型的继承

[折叠代码]

function AClass() { this.Property = 1; this.Method = function() { alert(1); } } function AClass2() { this.Property2 = 2; this.Method2 = function() { alert(2); } } AClass2.prototype = new AClass(); var obj = new AClass2(); alert(obj.Property); obj.Method(); alert(obj.Property2); obj.Method2();

[折叠代码]

这个例子说明了一个类型如何从另一个类型继承。

8  子类如何重写父类的属性或方法

[折叠代码]

function AClass() { this.Property = 1; this.Method = function() { alert(1); } } function AClass2() { this.Property2 = 2; this.Method2 = function() { alert(2); } } AClass2.prototype = new AClass(); AClass2.prototype.Property = 3; AClass2.prototype.Method = function() { alert(4); } var obj = new AClass2(); alert(obj.Property); obj.Method();

[折叠代码]

这个例子说明了子类如何重写父类的属性或方法。

可见JavaScript能够实现的面向对象的特征有:
·公有属性(public field)
·公有方法(public Method)
·私有属性(private field)
·私有方法(private field)
·方法重载(method overload)
·构造函数(constructor)
·事件(event)
·单一继承(single inherit)
·子类重写父类的属性或方法(override)
·静态属性或方法(static member)

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/czh_friend/archive/2007/04/16/1566319.aspx

时间: 2024-10-25 11:06:12

js中String.prototype.format類似于.net中的string.formitz效果的相关文章

js 实现 C# 的 format 方法

2014-11-08 12:18:51 更新,修复原形链方法被当作关键词的bug,其实之前是想用全局关键词的,不过还是算了,array里有太多单词了.                                现在 length callee 关键词依然会被输出,以后修复,现在为了精简就将就着用了.2014-08-26 14:55:30 更新,修复 #5楼 冲动 兄弟提出的问题. 其实我根本不会 C# 只是看到人家写了个这种功能<js实现类似c#中的字符串处理方法format()>我看了下

js中的prototype和__proto__

var Person = function(name){ this.name = name; this.say = function(){ return "I am " + this.name; }; } var p=new Person("aaa"); Object的文档: Properties The following table lists properties of the Object Object. Property Description __pro

理解JS中的prototype

JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型方法 例子: function People(name) { this.name=name; //对象方法 this.Introduce=function

JS中的prototype(转载)

在研究别人写的js图像处理算法时,发现其中脚本中大量使用prototype,很难读明白,就网上查了下资料发现这篇文章很易懂,就转载如下: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型方法 例子: function People(name){this.name=name;//对象方

JS中的prototype

JS中的prototype     原文地址: http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html JS中的prototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a 类方法  /

Date.prototype.format,js下的时间格式处理函数

该方法在date的原型中扩展了format方法,使其可以方便的格式化日期格式输出. Date.prototype.format =function(format) { var o = { "M+" : this.getMonth()+1, //month "d+" : this.getDate(), //day "h+" : this.getHours(), //hour "m+" : this.getMinutes(), /

JS中对于prototype的理解

JS中的prototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a -> 类方法 b -> 对象方法 c -> 原型方法 例子: function People(name){ //对象属性 this.name=name; //对象方法 this

(转载)JS中的prototype

原文地址:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html#!comments JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型

JS中的prototype(转)

网址来源:http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展.我们称B的原型为A. 2 javascript的方法可以分为三类: a 类方法 b 对象方法 c 原型方法 例子: fun