gpt4 book ai didi

javascript - 将函数原型(prototype)设置为新对象

转载 作者:行者123 更新时间:2023-11-28 19:51:06 25 4
gpt4 key购买 nike

我最近在代码中看到了这种模式:

 function Person(){
this.name = "Dan";
}

Person.prototype = {
whatAmI: function(){
alert("I am a person")
}
}

在上面的person对象上,只能通过调用Person.prototype.whatAmI()来引用函数whatAmI,而不是<强>Person.whatAmI() .

这样做有什么特殊原因吗?它似乎越来越流行,除了将方法隐藏在原型(prototype)对象而不是 Person 对象上之外,我看不到其他好处。

我了解 Javascript 中的基本原型(prototype),并且我知道使用 Person.prototype.whatAmI 与仅调用 new Person() 相比,在代码中有点不合常规。然而,我谈论的是 Person 对象从另一个函数调用返回并用作普通对象的地方。因此,调用whatAmI的唯一方法是通过Person.prototype.whatAmI

最佳答案

函数上的 prototype 属性的用途是,它确定在与该函数一起使用时,将什么原型(prototype)分配给通过 new 表达式创建的对象,例如:

var p = new Person();

现在,p 的底层原型(prototype)是 Person.prototype 在计算 new 表达式时引用的对象,因此:

p.whoAmI();

有效。

一般来说,替换 prototype 属性上的对象并不是一个好主意,您应该只在设置继承层次结构时才这样做。相反,只需添加现有对象即可:

function Person(){
this.name = "Dan";
}

Person.prototype.whoAmI = function(){
alert("I am a person")
};
<小时/>

有点离题,但是:

但是,在设置层次结构时,您必须替换该对象。

// Base
function Person(name) {
this.name = name;
}
Person.prototype.whoAmI = function() {
alert("I am " + this.name);
};

// Derived
function Employee(name, position) {
Person.call(this, name);
this.position = position;
}
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

// Augmenting the derived prototype
Employee.prototype.whatDoIDo = function() {
alert("I hold the position " + this.position);
};

(这并不意味着是层次结构的全部、最终,只是一个简单的例子。)

关于javascript - 将函数原型(prototype)设置为新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23437028/

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