1.示例:扩展String的trim功能
<script type="text/javascript">
// from MicrosoftAjax.debug.js
String.prototype.trim = function String$trim(){ //黄色部分没有亦可,不知此处$作用,还请高手指教!
if (arguments.length !== 0) throw Error.parameterCount();
return this.replace(/^\s+|\s+$/g,""); // 去处前后空格
}
function clickMe(){
var text1 = document.getElementById('txt1').value; // input: kevin wang, 前后各有2个空格
var text2 = text1.trim();
alert(text1.length); // 14
alert(text2.length); // 10
}
</script>
<input type="text" id="txt1" />
<input type="button" value="Click" οnclick="clickMe()"/>
2.示例:原型模型
<script type="text/javascript">
function Person(name)
{
this.name = name;
};
Person.prototype.SayHello = function()
{
alert("Hello, I'm " + this.name);
};
function Employee(name,salary)
{
Person.call(this, name); // 调用上层构造函数
this.salary = salary;
};
// 子类构造函数首先需要用上层构造函数来建立prototype对象,来实现继承的概念
Employee.prototype = new Person(); // 若没有这个定义,则下面Mike.SayHello()执行不了
// 子类方法也定义到构造函数之上
Employee.prototype.ShowSalary = function()
{
alert(this.name + " $ " + this.salary);
};
var Kevin = new Person("Kevin");
Kevin.SayHello();
var Mike = new Employee("Mike", 5000);
Mike.SayHello();
Mike.ShowSalary();
</script>
注:在上述原型模型中,为了实现继承,必须首先将子类构造函数的prototype设置为一个父类的对象实例(蓝色标注)。创建这个父类对象实例的目的就是为了构成原型链,以起到共享上层原型方法的作用。但创建这个实例对象时,上层构造函数也会给它设置对象成员,这些对象成员对于继承来说是没有意义的。虽然,我们也没有给构造函数传递参数,但确实创建了若干没有用的成员,尽管其值是undefined,这也是一种浪费啊。所以说,世界上没有完美的事情啊!
持续更新中......