问题背景
今天在看JS教程时,发现以下这个例子:
var x="john";
var y= new String("jhon");
typeof x;//返回String
typeof y;//返回Object
我想的是对于typeof返回值的追问。
后来在百度发现了这个问题的语言描述:JS继承之原型链继承。
简单说就是:
- typeof
- prototype
- __proto__
这三个关键字的区别。
写在前面
首先是看了@“陌上寒的简书”关于JS原型和原型链的讲解,感觉自己懂了一些。这里进行复述。另外:感谢前辈的指点!陌上寒的简书
问题解答
对象创建
首先我们要从JS创建对象的三个方法说起。
JS创建对象有三种方法分别是:
1、对象直接量
var a1 ="A";
var a2 ={x:12,y:13};
2、New方法
var b1 = new Object();
var b2 = new Array();
function() fun{
console.log("这是一个自定义的构造函数")
};
var c1 = new fun();
3、Object.creat方法
const d1 = Object.creat({x:1});
const d2 = Object.creat(Object.prototype{
foo:{
writable: true,
configurable: true,
value: "hello"
}
})
const d3 = Object.create(null)
var e1 = {};
var e2 = new Object();
var e3 = Object.create(Object.prototype)
要知道JS中万物皆对象,我们把创建出来的对象分为函数对象和普通对象。可以通过typeof来判断。一般普通对象返回Object而函数对象返回对应的function。
那么普通对象和函数对象的区别是什么?
typeof
对象分类
2018/11/09更新
今天在地铁上又重新温故了一遍老哥的博客。
紧接着昨天的问题我们给出函数对象和普通对象的一些区别:
函数对象可以创建简单对象:
function fun (){
console.log("这是一个自定义构造函数")
};
var object = new fun();
可以通过typeof来判断
function f1(){};
typeof f1//return "function"
var o1 = new f1();
typeof o1//return "object"
var o2 = {};
typeof o2//return" object"
复习函数对象的创建方法
在这里复习一下创建函数对象的方法:
function f1(){};
等价于
var f1 = new function();
function f2(a,b){
window.alert(a+b);
}
f(1,2);
var f2 = new function(’a','b',alert)
等价于