请详细解释javascript中的原型属性和函数构造函数
我正在读科迪·林德利写的一本名为《Javascript启蒙》的好书。 在涵盖prototype属性的章节中,它讨论了函数实例如何始终被赋予prototype属性,这一点非常容易理解。以下摘录中的粗体文字是我不理解的: 原型是所有Function()实例的标准配置。 所有函数都是从Function()构造函数创建的,即使您没有直接调用Function()构造函数 (例如,var add=新函数('x','y','return x+z');) 而是使用文字符号 (例如,var add=函数(x,y){return x+z};) 创建函数实例时,总是为其提供一个原型属性,,它是一个空对象。 下面,我们定义一个名为myFunction的函数,然后访问prototype属性,即 只是一个空对象请详细解释javascript中的原型属性和函数构造函数,javascript,object,constructor,user-defined-functions,prototype-chain,Javascript,Object,Constructor,User Defined Functions,Prototype Chain,我正在读科迪·林德利写的一本名为《Javascript启蒙》的好书。 在涵盖prototype属性的章节中,它讨论了函数实例如何始终被赋予prototype属性,这一点非常容易理解。以下摘录中的粗体文字是我不理解的: 原型是所有Function()实例的标准配置。 所有函数都是从Function()构造函数创建的,即使您没有直接调用Function()构造函数 (例如,var add=新函数('x','y','return x+z');) 而是使用文字符号 (例如,var add=函数(x,y)
<!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>
var myFunction=function(){};
console.log(myFunction.prototype);//日志对象{}
console.log(typeof myFunction.prototype);//日志“对象”
确保您完全理解prototype属性来自函数()
构造器只有当我们打算将函数用作用户定义的构造函数时
prototype属性已被利用,但这不会改变Function()构造函数
为每个实例提供一个原型属性
以下是我对加粗文本的问题:1。为什么原型对象是空的?我认为prototype应该包含一些属性和方法,用于所有本机对象。2.我完全搞不明白,只有当您打算将该函数用作用户定义的构造函数时,才会使用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现在是一个对象,您可以在其中访问所有成员变量、函数等。要强制控制台显示原型链树,您可以执行
console.dir
而不是console.log
尝试以下操作:function f(){};控制台日志(f.bind类型)代码>也可以这样做:console.log(Object.getPrototypeOf(f.prototype))
查看继承的原型。.prototype
属性是构造函数用于实现继承的属性。它最初是空的,因为该语言并不假定您想要继承任何东西(但我不确定它是否为空。我认为它最初指向Object.prototype)。当您想要从某个对象继承时,可以将构造函数的原型指向您想要的对象。