函数对象原型

这个问题在这里已经有了答案:

  • JavaScript .prototype如何工作? 21个答案

  • 原型只不过是实例继承属性的对象。

    因此, funcObj是另一个原型( Function的一个)的实例,它从中继承了所有的属性。 另外,它本身也有一个prototype ,你可以在其上绑定任何你想要的原型,并且一旦你调用它来构造funcObj新实例,就会使用原型(也就是说,当你将它和new keywork一起调用时,就像new funcObj() )。

    因此, funcObj没有叫做greet的成员,而它的实例拥有它是funcObj


    因为该函数是与实例不同的对象。

    将属性放在一个对象上不会影响任何其他对象; 甚至没有那个对象或原型是一个实例的函数。


    就像一个class Foo本身不是同一类型的new Foo ,没有理由Foo拥有分配给任何属性Foo.prototype 。 原因有一点不同,但考虑用另一种语言如java,很明显,你试图做的事情不应该工作:

    class Foo {
        public String bar = "analogous to Foo.prototype.bar which is a property of Foo instances";
    }
    
    class Baz {
        String thisMethodShouldAndWillFail() {
            return Foo.bar;
        }
        String thisIsWhatShouldAndWillWork() {
            return (new Foo()).bar;
        }
    }
    

    在JavaScript中,你需要纠正你对原型是什么以及它如何与对象和构造函数相关的想法,否则你会不断遇到问题。 foo有一个原型,但该原型不是foo.prototypefoo本身没有属于它的原型。 foo的原型由其构造函数Foo确定; 这样做更有意义,因为您可以在foo.prototype后将任何旧值赋值给foo.prototype ,从而将foo转换为未初始化的类的实例。

    构造函数Foo同样没有任何意义,如果它将作为它定义的类的实例; 它本身并未初始化,因此不能安全地假定它将实现为其实例设计的行为。 FooFunction一个实例,因为它可以被调用,所以它是有意义的。 因此Foo的原型是Function.prototype ,而不是Foo.prototype

    当您调用foo = new Foo时,将创建foo和其原型之间的关系。 由于构造函数Foo的主体有望初始化实例,因此这是赋予foo其原型的唯一有意义的时间。 原型提供了一个对象它的共同行为,构造函数初始化对象,以便这些行为将按预期工作。 当通过new Foo构建时,赋予foo的原型不是别的,而是Foo.prototype ; 这是在Foo执行之前完成的,以保证它不可能被搞乱。 之后,没有明确地通过Foo就无法访问foo的原型。

    enter code here
    
    链接地址: http://www.djcxy.com/p/30081.html

    上一篇: Function object prototype

    下一篇: understanding Prototype in javascript