Jam*_*add 4 javascript prototype function prototypal-inheritance
阅读本文档后:http: //es5.github.io/#x4.2.1
我对CF上的两个原型引用感到困惑,并且通过以下声明:
CFp中名为CFP1的属性由cf1,cf2,cf3,cf4和cf5共享(但不由CF共享)
关于Javascript的大部分文献都指出函数是第一类对象,因此我希望能够将它们的隐式原型引用设置为对象以实现原型继承(免责声明:我实际上并不知道我是什么' d使用此继承,但我想到它是否可能).我可以在函数上设置这个隐式原型,还是总是指向Function.prototype(我假设这是默认值).为什么Function有显式和隐式原型?另外,Javascript中的任何其他类型都有显式和隐式原型引用,或者在这方面功能是否唯一?
考虑规范中的图表,以及它下面的代码,它试图重现正在发生的事情:

function CF() {}; // the constructor
CF.P1 = 'foo'; // P1 is an own property of the constructor; P2 is the same
var CFp = { CRP1: 'bar' }; // for now, just an object, with a CRP1 property
CF.prototype = CFp // set CFp as the 'explicit prototype property' of CF;
// only constructors have such a property
var cf1 = new CF(); // an instance;
var cf2 = new CF(); // another instance; cf3..cf5 are constructed the same way
Object.getPrototypeOf(cf1); // CFp; this is the 'implicit prototype link' from cf1 to CFp;
// put another way, CFp became the [[Prototype]] of cf1
Run Code Online (Sandbox Code Playgroud)
你说你对这句话很困惑:CFp中名为CFP1的属性由cf1,cf2,cf3,cf4和cf5(但不是CF)共享.考虑一下:
cf1.CRP1; // 'bar' - found on CFp through cf1
cf2.CRP1; // 'bar' - found on CFp through cf2
CF.CRP1; // undefined
Run Code Online (Sandbox Code Playgroud)
那么这句话意味着你可以访问CRP1from 的内容cf1..cf5,而不是构造CF函数的内容(记住,函数/构造函数也是对象,因此它们可以具有属性).那是因为CFp(的"所有者" CRP1)不是[[Prototype]]的CF,它只是被指向的价值CF.prototype属性.该prototype属性仅存在于函数对象中,仅用于定义[[Prototype]]由调用函数调用创建的实例作为构造函数(如in new CF()).这两个事实[[Prototype]],并prototype解读为"原型"是极大的混乱之源-什么是混淆了你的,也许一部分; 希望它现在不那么混乱了.考虑到这一点,我会尽快回答你的其他问题.
关于Javascript的大部分文献都指出函数是第一类对象,因此我希望能够像对象一样设置隐式原型引用以实现原型继承[...].
在ES5中,除了非标准属性之外,无法直接设置[[Prototype]]现有对象的隐式原型引用(或)__proto__.你可以做的是用给定的东西创建新的对象[[Prototype]].你可以做到这一点var obj = new ConstructorFunction(),其中[[Prototype]]的obj就是ConstructorFunction.prototype,或者var obj = Object.create(someOtherObj),其中[[Prototype]]的obj是someOtherObj.引入该语言的更高版本是Object.setPrototypeOf为了做到这一点,但出于性能原因,不鼓励使用它.
我可以在函数上设置这个隐式原型,还是总是指向Function.prototype(我假设这是默认值).
是的,有__proto__或Object.setPrototypeOf.但通常你不应该.
为什么Function有显式和隐式原型?另外,Javascript中的任何其他类型都有显式和隐式原型引用,或者在这方面功能是否唯一?
Function(" Function构造函数")只是一个函数,和任何其他函数一样,它有一个prototype属性; 它也是一个对象,并且(几乎)任何其他对象都有一个[[Prototype]]对象.还有其他类型的标准构造太像Object,String,Array,Boolean,Number.它们都是功能,并且具有a prototype和a [[Prototype]].
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |