gpt4 book ai didi

javascript - JavaScript 如何创建对象?

转载 作者:行者123 更新时间:2023-11-29 15:05:02 24 4
gpt4 key购买 nike

function Person(name) {
this.name = name;
this.say = function() {
console.info('I am ' + this.name);
}
}
var p=new Person('stackoverflow');

有人告诉我上面的代码等于:

function Person(name) {
this.name = name;
this.say = function() {
console.info('I am ' + this.name);
}
}

var p={};
Person.call(p,'stackoverflow');

这是真的吗?

如果是这样,原型(prototype)怎么样?

javascripte中的每个对象都有一个原型(prototype),原型(prototype)链保存着对象之间的关系,不知道这个原型(prototype)有没有作用。

在这个例子中,当'p'的对象被创建时,它是否调用了父类(super class)Person的一些内置方法?

顺便说一句,我想知道语法 var p=new Person('stackoverflow'); 的作用是什么?


----------------更新--------------------

function Person(name) {
this.name = name;
}
Person.prototype.say = function() {
console.info('I am ' + this.name);
}

如果我把 say 的定义放在 person 函数中怎么样:

function Person(name) {
this.name = name;
Person.prototype.say = function() {
console.info('I am ' + this.name);
}
}

最佳答案

代码:

var p=new Person('stackoverflow');

创建 Person 类的新实例。你必须记住javascript中的类是函数,所以当你调用时:

Person.call(p,'stackoverflow');

您只是调用 Person 函数并将其绑定(bind)到 p 对象(这意味着在函数上下文中 this 将引用 p 对象)。这些代码片段做同样的事情,除了第一个是类的实例,所以如果你更新 person 的原型(prototype)对象,它的属性将被更新。

无论如何,当你填充 Person 函数的原型(prototype)对象时,情况就不同了:

Person.prototype={test:"test"}

如果您在 Person 函数声明之后添加它,您将看到这些代码片段具有不同的行为。用“new”初始化的对象将包含测试属性,但另一个没有。发生这种情况是因为在使用“new”时原型(prototype)对象仅应用于类的实例。

关于javascript - JavaScript 如何创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4022435/

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