gpt4 book ai didi

javascript - 请解释有关javascript中原型(prototype)属性和函数构造函数的详细信息

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

我正在阅读 Cody Lindley 的一本名为“Javascript Enlightenment”的好书。在涵盖原型(prototype)属性的章节中,它讨论了如何始终为函数实例赋予原型(prototype)属性......非常容易理解。以下摘录中的粗体文字是我不理解的内容:

原型(prototype)是所有 Function() 实例的标准。所有函数都是从 Function() 构造函数创建的,即使您不直接调用 Function() 构造函数也是如此

(例如 var add = new Function('x', 'y', 'return x + z');)

而是使用文字符号

(例如 var add = function(x,y){return x + z};)。

当一个函数实例被创建时,它总是被赋予一个原型(prototype)属性,它是一个空对象。下面,我们定义一个名为 myFunction 的函数,然后我们访问原型(prototype)属性,它是只是一个空对象。

<!DOCTYPE html><html lang="en"><body><script>
var myFunction = function() {};
console.log(myFunction.prototype); // logs object{}
console.log(typeof myFunction.prototype); // logs 'object'
</script></body></html>

确保您完全理解原型(prototype)属性来自 Function()构造函数。 只有当我们打算将我们的函数用作用户定义的构造函数时,prototype 属性被利用,但这并没有改变 Function() 构造函数的事实给每个实例一个原型(prototype)属性。

下面是我对粗体文本的疑问: 1. 为什么原型(prototype)对象是空的?我认为原型(prototype)应该为所有 native 对象在其中包含一些属性和方法。 2. 我完全不明白只有在您打算将该函数用作用户定义的构造函数时才利用原型(prototype)是什么意思。这是否意味着只有在用户定义函数时才能访问原型(prototype)链?

最佳答案

  1. prototype 属性对象是空的,因为没有分配给它,但它仍然存在于每个函数中,这就是 javascript 的编写方式。
  2. 如果您编写面向对象的 javascript,您将只使用原型(prototype)属性。这是一个简单的例子:

    function myFunction() {this.a=1; this.b=2;}
    myFunction.prototype.myMemberFunction = function() {return this.a + this.b;}
    var f = new myFunction();

    // Now you can call the member function like this:
    alert(f.myMemberFunction());

f 现在是一个对象,您可以访问其中的所有成员变量、函数等。

关于javascript - 请解释有关javascript中原型(prototype)属性和函数构造函数的详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35677656/

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