我正在读一本名叫'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.我无法弄清楚只有在您打算将该函数用作用户定义的构造函数时,才会使用原型。这是否意味着只有在用户定义函数时才能访问原型链?
答案 0 :(得分:1)
如果你编写面向对象的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现在是一个对象,您可以在其中访问所有成员变量,函数等。