笔记学习出处:渡一教育 Web前端百大项目
对象的创建方法
1.plainObject 对象字面量/对象直接量
var obj={
}
2.构造函数
(1)系统自带的构造函数 Object()
(2)自定义
var obj=new Object();
function Car(){
this.name="BWM";
this.height="1400";
this.lang="4900";
this.weight=1000;
this.health=100;
this.run=function (){
this.health--;
}
}
var person=new Car();
构造函数内部原理
1.在函数体最前面隐式的加上this{}
2.执行this.xxx=xxx;
3.隐式的返回this
数字分为两种,一种是原始型数字,一种是对象型数字。原始型数字不能有属性和方法,但是对象型数字可以有属性和方法。字符串和布尔类型的值也是一样的原理。
var num=new Number(123);
num.a=456;
console.log(num.a);
var str=new String('abcd');
var bol=new Boolean('true');
包装类:
上面讲到原始型数字不能有属性和方法,但是下面这种程序写法又不报错,但是在开发时候一定不能这么用:
原始值的确没有属性和方法,但是比如:
var str="abc";
console.log(str.length);
却有属性length,那是为什么呢?
原因:当原始值调用属性的时候,(需要看原始值是什么类型的),他会new String(‘abc’).length;构造出一个字符串对象,并把字符串对象的内容填充为abc,这个隐式包装的过程,就叫做包装类。
//包装类
var num=4;
num.len=3;
//new Number(4).len=3;--->delete
//new Number(num).abc
console.log(num.len); //undefined
例子:
var str="abc";
str+=1; //abc1
var test=typeof(str); //string
if(test.length==6){
test.sign="typeof的返回结果可能是String";
//new String(test).sign='xxx';--->delete
}
//new String(test).sign
console.log(test.sign); //undefined
最后运行结果为undefined。
首先,str.length本身就是字符串的一个属性,最后返回的结果是6,所以可以运行if里面的内容,但是因为str本身是原始型字符,所以不能有属性和方法,所以最后的运行结果为undefined
闭包小练习:
function Person(name,age,sex){
var a=0;
this.name=name;
this.age=age;
this.sex=sex;
function sss(){
a++;
document.write(a);
}
this.say=sss;
}
var oPerson=new Person();
oPerson.say(); //1
oPerson.say(); //2
var oPerson1=new Person();
oPerson1.say(); //1
原型:
1.定义:原型是function对象的一个属性,他定义了构造函数制造出的对象的公共祖先。通过该构造函数产生的对象,可以继承该原型的属性和方法。原型也是对象。
2.利用原型特点和概念,可以提取共有属性。
3.对象如何查看原型–>隐式属性__proto__
4.对象如何查看对象的构造函数–>constructor
原型必须要基于构造函数的,如果不是基于构造函数的原型是没有意义的。
任何函数都会有一个属性叫做prototype,这个prototype是这个函数构造出的对象的共有祖先。(也就是祖先上的方法和属性,对于这个函数构造出的对象都可以用)
在new的过程中,会产生this,this指向新产生的这个对象,其中这个this里面的__proto__,是指向其祖先Person.prototype(这个构造函数的原型)的。
//Person.prototype --原型
//Person.prototype={} --是祖先
Person.prototype.Lastname="Luo";
function Person(){
//var this={
// __proto__:Person.prototype
//}
}
var person=new Person();
var person1=new Person();
会发现person和person1都有继承“他祖先”的Lastname
另一种写法:
Car.prototype={
height:1400,
lang:4900,
carName:"BMW"
}
function Car(){
}
var car=new Car(