日期:2014-05-16 浏览次数:20411 次
<script> //为Person对象创建一个构造函数 function Person(name){ this.name = name; } //给Person对象添加一个新方法 Person.prototype.getName = function(){ return this.name; }; //创建一个User对象的构造函数 function User(name, password){ //注意,这里并没有支持方便的重载/继承,也就是说, //不能调用父类的构造函数 //此处等于是给父类的name属性赋值,类似于java的super(name); //this.name = name; Person.call(this, name);//调用父类的构造函数 this.password = password; } //User对象继承所有Person对象的方法 User.prototype = new Person(); //添加一个新方法到User对象中 User.prototype.getPassword = function(){ return this.password; }; var user = new User("张三", "123"); alert(user.name); alert(user.getName()); alert(user.password); alert(user.getPassword()); </script>
<script> //简单的辅助函数,让你可以将新函数绑定到对象的prototype上 //这个将会添加一个公共方法到 Function.prototype 中, //这样通过类扩展所有的函数都可以用它了。它要一个名称和一个函数作为参数。 //它返回 this 。当我写一个没有返回值的方法时, //我通常都会让它返回 this 。这样可以形成链式语句。 Function.prototype.method = function(name, func){ this.prototype[name] = func; return this; }; //一个(相当复杂的)函数,允许你方便地从其他对象继承函数, //同时仍然可以调用属于父对象的那些函数 //inherits 方法,它会指出一个类是继承自另一个类的。 //它必须在两个类都定义完了之后才能定义,但要在方法继承之前调用。 Function.method('inherits', function(parent){ //记录我们目前所在父层次的级数 var depth = 0; //继承父对象的方法 var proto = this.prototype = new prent(); //创建一个新的名为'uber'的"特权"函数, //调用它时会执行所有在继承时被重写的函数 this.method('uber', function uber(name){ var func; //要执行的函数 var ret; //函数的返回值 var v = parent.prototype; //父对象的prototype //如果我们已经在某个'uber'函数之内 if(depth){ //上溯必要的depth,以找到原始的prototype for(var i = d; i > 0; i += 1){ v = v.constructor.prototype; } //从该prototype中获得函数 func = v[name]; //否则这就是'uber'函数的第一次调用 } else { //从prototype获得要执行的函数 func = proto[name]; //如果此函数属于当前的prototype if(func == this[name]){ //则改为调用父对象的prototype func = v[name]; } } //记录我们在继承堆栈中所在位置的级数 depth += 1; //使用除第一个以外所有的arguments调用此函数。 //(因为第一个参数是执行的函数名) ret = func.apply(this, Array.prototype.slice.apply(arguments, [1])); //恢复继承堆栈 depth -= 1; //返回执行过的函数的返回值 return ret; }); return this; }); //只继承父对象特定函数的函数。而非使用new parent()继承所有的函数 //swiss 方法对每个参数进行循环。每个名称,它都将 parent的原型中 //的成员复制下来到新的类的 prototype 中。 Function.method('swiss', function(parent){ //遍历所有要继承的方法 for(var i = 1; i < arguments.length; i += 1){ //需要导入的方法名 var name = arguments[i]; //将此方法导入this对象的prototype中 this.prototype[name] = parent.prototype[name]; } return this; }); </script>
<script> //创建一个新的Person对象构造函数 function Person(name){ this.name = name; } //给Person对象添加一个新的方法 Person.method('getName', function(){ return this.name; }); var per = new Person("张三"); alert(per.getName()); //创建了一个新的User对象构造函数 function User(name, password){ this.name = name; this.password = password; } //从Person对象继承所有的方法 User.inherits(Person); //给User对象添加一个新的方法 User.method('