当采用构造器调用模式,即用new前缀去调用一个函数时,函数执行的方式会被修改。如果new运算符是一个方法而不是一个运算符,它可能会像这样执行
// 如果new运算符是一个方法而不是一个运算符,它可能会像这样执行
Function.method("new",function () {
// 创建一个新对象,它继承自构造器函数的原型对象。
var that = Object.create(this.prototype);
// 调用构造函数,绑定this到新对象上。
var other = this.apply(that,arguments);
//如果它返回值不是对象,就返回该新对象
return (typeof other ==="object" && other) || that;
});
//我们可以定义一个构造器并扩充它的原型
var Mammal = function(name) {
this.name = name;
}
Mammal.prototype.get_name = function () {
return this.name;
}
Mammal.prototype.says = function () {
return this.sayIng || '';
}
//现在,我们可以构造一个实例
var myMammal = new Mammal("Herb the Mammal");
// 构造另一个伪类来继承Mammal
var Cat = function(name) {
this.name = name;
this.saying = "meow";
}
Cat.prototype = new Mammal();
一个更好的备选方案就是根本不使用new.
“伪类” 隐藏了该语言的真实本质。