function foo(){
this.a =2;
};
//assign a property
foo.color = 'red';
//assign a method
foo.sayHello = function(){`enter code here`
alert("hello!");
};
var foo1 = new foo();
console.log(foo.color); //red
console.log(foo1.color); //undefined
我有这样的立场。我可以做foo1.a并返回2。
但如果我正在做foo1.color它是未定义的。
谁能告诉我如何通过实例访问函数外部定义的属性和方法,以及在函数内部和外部定义属性有什么区别?
答案 0 :(得分:1)
foo.prototype.color = 'red'
会将该属性分配应用于new foo()
的所有实例。
此属性将应用于所有实例,甚至是已存在的实例。
另一方面, this.a = 2
仅适用于当前实例。
答案 1 :(得分:1)
第一个在a
上定义一个属性this
,当它被称为构造函数时,它将是foo
方法的实例(使用new
运营商)。 foo
的每个实例都会拥有此属性的副本。
第二个在color
函数对象本身定义静态属性foo
。实例不会继承此属性。
第三个又定义了一个静态属性sayHello
,其值恰好是一个函数。
如果要定义将由所有实例继承的属性,则需要在构造函数的prototype
上定义它们:
foo.prototype.color = 'red';
在这种情况下,foo
的每个实例都可以访问相同的 color
属性(而不是像第一个示例中那样自己的副本)。 / p>
答案 2 :(得分:0)
foo.prototype.color = 'red'
会将属性赋值应用于新foo()的所有实例。
this.a = 2 // will add property 'a' to the current instance.
E.g
var foo1 = new foo();
console.log(foo.color); // red
执行此功能将向窗口对象添加属性(此处为a)。它将它添加到窗口中,因为window是在执行它时调用函数的对象,而函数中的函数是调用函数的对象。
foo() // call foo() using window object.
console.log(this.a); // outputs to 2. Here is should be noted that this refers to window object