关于字符串也可以是对象,引发的对typeof的思考。

问题背景

今天在看JS教程时,发现以下这个例子:

var x="john";
var y= new String("jhon");
typeof x;//返回String
typeof y;//返回Object

我想的是对于typeof返回值的追问。
后来在百度发现了这个问题的语言描述:JS继承之原型链继承。
简单说就是:

  1. typeof
  2. prototype
  3. __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)
等价于

猜你喜欢

转载自blog.csdn.net/chenmo2019/article/details/83866929
今日推荐