1 创建对象的几种方法
2 原型,构造函数,实例,原型链
创建对象的几种方法
字面量的方法
1 var obj = {
name:"Jack",
age:90
}
var obj = new Object({name:"JAck"})
2 构造函数
function Person(name) {
this.name = name
}
var p1 = new Person(Jack)
3 调用哪个系统的Object
var obj = new Object
obj.name = "Jact"
工程模式
function createPerson(name,job){
var o = new Object()
o.name = name
o.job = job
}
JS中new一个对象的过程
1 创建空对象
var obj = {};
2 设置新对象的constructor属性为构造函数的名称设置新对象的__proto__属性指向构造函数的prototype对象
obj.__proto__ = ClassA.prototype
3 使用新对象调用函数,函数中的this被指向新势力对象
ClassA.call(obj) //{}.构造函数()
4 将初始化完毕的新对象地址,保存到等号左边的变量中
注意:若构造函数中返回this或返回值是基本类型(number,string,boolean,null,ubdefined)的值,则返回新实例对象,若返回值是引用类型的值,则实际发返回值为这个引用类型
var foo = "bar"
function test () {
this.foo = "foo";
}
new test();
console.log(this.foo) //bar
consol.log(new test().foo)
instanceof 和typeof之间的区别
1 undefined,string,number,boolean属于简单的值类型,不是对象
2 数组,null,对象,函数都是对象,他们是引用类型
typeof "abc" //string
typeof 123 //number
typeof x ///undefined
typeof true //boolean
console.log(function(){}) //function
typeof [] //object
typeof {} //objct
typeof null //object
注:简单的值类型用typeof就可以简单分辨清楚了。但是就是使用typeof来判断引用数据的类型并不准确,instanceof 就是判断一个对象是否是某一个构造函数的实例