构造函数 原型prototype 伪类

当采用构造器调用模式,即用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.

“伪类” 隐藏了该语言的真实本质。

猜你喜欢

转载自my.oschina.net/u/2371743/blog/901852