gpt4 book ai didi

Javascript继承扩展方法技巧

转载 作者:行者123 更新时间:2023-11-28 10:01:48 25 4
gpt4 key购买 nike

我正在开发一种扩展方法来在 JavaScript 中创建对象和函数的子类型。我正在努力理解这两行到底有何不同:

  • f.prototype = p;
  • f.prototype = new 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/definePropertieshttps://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create

关于Javascript继承扩展方法技巧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9043461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com