Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript继承扩展方法提示_Javascript - Fatal编程技术网

Javascript继承扩展方法提示

Javascript继承扩展方法提示,javascript,Javascript,我正在研究一种扩展方法,用JavaScript创建对象和函数的子类型。我很难理解这两条线到底有什么不同: f、 原型=p f、 原型=新的p() 我能解释一下幕后到底发生了什么吗 我的理解是当我传入一个对象时,如果我使用“new p();”调用的构造函数可能不存在。这是正确的吗?有没有办法合并这些代码 function extend(p) { if (p == null) throw TypeError(); var f = function()

我正在研究一种扩展方法,用JavaScript创建对象和函数的子类型。我很难理解这两条线到底有什么不同:

  • f、 原型=p
  • f、 原型=新的p()
我能解释一下幕后到底发生了什么吗

我的理解是当我传入一个对象时,如果我使用“new p();”调用的构造函数可能不存在。这是正确的吗?有没有办法合并这些代码

    function extend(p) {
        if (p == null) throw TypeError(); 

        var f = function() {}, 
            t = typeof p;

        if( t === 'object' ) {
            f.prototype = p;

            f.prototype.constructor = f;
            return new f();

        } else if( t === 'function' ) {
            f.prototype = new p(); 

            f.prototype.constructor = f;
            return f; 
        } else {
            throw TypeError();
        }
    }       

    // ==========================
    var Person = {
        firstName: 'John',
        lastName: 'Doe'
    };
    console.log( 'Person: ', Person );

    var Employee = extend( Person );
    Employee.prototype = {
        employeeID: 0
    }

    console.log( 'Employee: ', Employee );

    var Manager = extend( Employee );
    Manager.prototype.fireEveryone = function() {
        alert( 'Everyone is fired!!!!' );
    }
    console.log( 'Manager: ', Manager );

谢谢

虽然我也将急切地等待着看到回复这个问题的答案,但我建议您看看ECMAScript 5中引入的新继承/OOP机制,我认为它在JavaScript方面的作用更为一致

详情如下:

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty

Golmaal,在发布之前,我实际上已经看过这些了……然后看到了这一点:我使用的是不支持ECMAScript 5的IE8。我刚刚解决了这个问题