如下两段代码,分别是使用对象字面量和构造函数创建对象。
代码段1:
var a={"name":"nihao"};
console.log(a);
代码段2:
var a=function(name){
this.name=name;
};
var b= new a("nihao");
console.log(b);
问题1:这两种方式生成的对象的区别是什么呢?
问题2:函数对象存在的意义是什么?
如下两段代码,分别是使用对象字面量和构造函数创建对象。
代码段1:
var a={"name":"nihao"};
console.log(a);
代码段2:
var a=function(name){
this.name=name;
};
var b= new a("nihao");
console.log(b);
问题1:这两种方式生成的对象的区别是什么呢?
问题2:函数对象存在的意义是什么?
这么跟你解释不知道你能不能理解:
var a=function(name){
this.name=name;
};
var b = function(){
var obj = {};
obj.__proto__ = a.prototype;
a.call(obj);
return obj;
}
console.log(b);
所以
b= {__proto:{
constructor:function(name){
this.name=name;
};
}
}
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
要理解这个知识点,首先你要知道:
1、函数对象的原型是对象(原型链为:实例,通过new构造函数-->函数对象-->对象-->null)
2、函数有prototype属性,而对象没有
因此,特别设计出了函数对象,方便对原型进行扩展,看下面代码也许可以帮你理解:
如上,查看console.log(b);打印的内容可以看到,对象b的原型是一个函数对象,它里面包含了在原型上扩展的属性sex
总结就是:函数对象可以被继承,而普通对象无法被继承。函数对象是一个对象,用来存放函数通过prototype扩展的属性和方法,可以被继承(构造函数实例化后生成的对象的原型就是函数对象)。
(一般我们不使用__proto__属性对对象的原型链进行扩展,它可能导致一些意想不到的问题,如下,使用__proto__对对象扩展,我们取到的值
tetst
和预期的值hahah
不一样)更多详情请查看:https://segmentfault.com/a/11...