请在javascript中解释有关prototype属性和函数构造函数的详细信息

时间:2016-02-28 01:30:16

标签: javascript object constructor user-defined-functions prototype-chain

我正在读一本名叫'Javascript Enlightenment'的好书,由Cody Lindley撰写。 在涵盖prototype属性的章节中,它讨论了如何为函数实例提供原型属性......很容易理解。以下摘录中的粗体文字是我不明白的:

Prototype是所有Function()实例的标准。 所有函数都是从Function()构造函数创建的,即使您没有直接调用Function()构造函数

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

而是使用文字符号

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

创建函数实例时,总是会给它一个原型属性,这是一个空对象。 下面,我们定义一个名为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() 构造函数。 只有一次我们打算将我们的函数用作用户定义的构造函数 原型属性是杠杆式的,但这并没有改变Function()构造函数的事实 为每个实例提供一个原型属性。

以下是关于粗体文本的问题:1。为什么原型对象是空的?我认为原型应该在其中包含一些属性和方法用于所有本机对象。 2.我无法弄清楚只有在您打算将该函数用作用户定义的构造函数时,才会使用原型。这是否意味着只有在用户定义函数时才能访问原型链?

1 个答案:

答案 0 :(得分:1)

  1. 原型属性对象是空的,因为没有为它分配任何内容,但它仍然存在于每个函数中,这就是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());
    
  3. f现在是一个对象,您可以在其中访问所有成员变量,函数等。

相关问题