 
                        
在这里for in可以遍历得到 person的属性;
可是得不到 car 的属性;
我的理解是这样的:
function car(){};他也是个对象,但是他又是个函数,而且在文中car 他并没有调用,他里面的没有执行,所以什么都没有!
如果没错,那我的问题又来了:
我们在 用原型 prototype拓展某些功能的时候,经常会这样写:
既然 prop在遍历 function的时候什么都不是,那这种遍历赋值的写法有什么意思呢??
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
题主你说的这两种不一样的呀。
1,
for (var key in car) { console.log(key) }中的car是个字符串类型的函数名称。为什么又说car是个对象呢,因为car是通过
new Function出来的。要遍历可以这么写:
for (var key in (new car)) { console.log(key) }2.正因为函数都是
new Function出来的,所以在Function的原型上增加一个extends方法,那么所有new出来的函数都有了这个extends方法,这个方法是给new出来的函数添加原型方法或者属性。函数也是对象,当然可以遍历其属性,只不过其没有属性或定义的属性被设置为不可遍历了
你的extends写错了吧~~
在base中遍历属性,在prototype中获取值?应该是这样的:(其实也有问题~)
通过函数原型的extends方法,可以把extend函数对象的原型属性添加到base中,
还需要检查传入的base,extend是不是函数,只有函数对象才会有prototype属性
实例对象是没有这个属性的
如果extend是个数组结构会更有扩展性吧
更正下,如果extends传入的第2个参数为对象字面量形式的话
下面这个car叫做构造函数
构造函数用于初始化一个对象
构造函数内部的代码,用于初始化这个对象的属性。这里 cObj 会具有一个独立的name属性。
而通过 for in 遍历构造函数,只会得到构造函数的可遍历的属性而已,并不会包含这个 name。
Function.prototype.extends
Function是所有function的构造函数。也就是说,你定义一个function,这个function就是 Function 的对象了。
注意一下这个函数内部的逻辑,它向this.prototype添加或修改属性,这个this,指的是实际的function。
输出结果是 'haha'。
所以,你可以通过向 Function.prototype增加属性,而变向的向所有function增加属性。这是有意义的。
以上。