gpt4 book ai didi

javascript - 创建原型(prototype)链最安全、跨浏览器广泛支持的方法是什么?

转载 作者:行者123 更新时间:2023-12-03 05:33:41 24 4
gpt4 key购买 nike

所以我仍在学习 JavaScript,并且现在正在使用原型(prototype)。我刚刚完成的类(class)向我展示了如何使用 __proto__ 来创建原型(prototype)继承链。这是我的意思的一个例子:

function Person(firstName,lastName,dob){
this.firstName = firstName;
this.lastName = lastName;
this.dob = new Date(dob);
}
Person.prototype = {
constructor: Person,
getFullName: function(){
return this.firstName + " " + this.lastName;
},
getAge: function(){
var ageDiff = Date.now() - this.dob;
var ageDiffDate = new Date(ageDiff);
return Math.abs(ageDiffDate.getUTCFullYear() - 1970);
}
}

function Employee(firstName,lastName,dob,position,dept){
this.firstName = firstName;
this.lastName = lastName;
this.dob = new Date(dob);
this.position = position;
this.dept = dept;
this.isFired = false;
}
Employee.prototype = {
constructor: Employee,
__proto__: Person.prototype,
doWork: function(){
console.log(this.getFullName() + " is doing work");
}
}

function Manager(firstName,lastName,dob,dept){
this.firstName = firstName;
this.lastName = lastName;
this.dob = new Date(dob);
this.position = "Manager";
this.dept = dept;
}
Manager.prototype = {
constructor: Manager,
__proto__: Employee.prototype,
fireEmployee: function(emp){
emp.isFired = true;
console.log(this.getFullName() + " has fired " + emp.getFullName());
}
}

var per = new Person("Bob","Saget","1990-02-05");
var emp = new Employee("Jane","Doe","1980-05-02","Clerk","Sales");
var mgr = new Manager("Jim","Smith","1970-09-10","Sales");

Employee 继承自 Person.prototypeManager 继承自 Employee.prototype。漂亮又简单。

但是,我了解到 __proto__ 属性并不能在所有网络浏览器上得到保证,因为 ES6 尚未被广泛采用。我一直在浏览互联网,试图找到一个清晰的解释来说明该怎么做,但我有点迷失了。

除了使用 __proto__ 之外,在 ES5 中设置原型(prototype)继承链的安全且得到广泛支持的方法是什么?

最佳答案

最安全的方法是使用标准 ES5 及更高版本的方法。

function A() {}

function B() {}
B.prototype = Object.create(A.prototype);

关于javascript - 创建原型(prototype)链最安全、跨浏览器广泛支持的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40829579/

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