JS基础学习日志之原型链、原型中的toString()、垃圾回收机制

目标:2019年结束前可以自己上手写出一个完整项目.
计划:目前先学完《尚硅谷JavaScript》140P,抽空多看HTML&CSS,之后再计划别的.
习惯:每天至少可以学1P(根据大计划).

2019-11-10

《尚硅谷JavaScript》学习笔记
P67(原型对象-原型链)、P68( toString() )、P68(垃圾回收 GC)

一、原型链
1、原型对象prototype也是一个对象,它也包含着原型prototype(proto)。
2、当使用一个对象的属性和方法时;
-会先在对象自身中寻找,如果对象自身中有,则直接使用;
-没有则在原型对象中寻找,如果原型对象中有,则直接使用;
-如果原型中没有,则在原型的原型对象中寻找,直到找到Object的原型中;
-当Object对象的原型中没有第二层原型对象,如果在Object对象的原型中也没有找到该属性、方法时,则返回undefined。
3、检查属性
-使用对象的【hasOwnProperty()】方法来检查对象本身中是否含有某个属性,有返回true,没有则false。
-使用【in】去检查对象中是否含有某个属性时,对象中没有原型对象中有,也会返回true。

function MyClass(){
};
var mc = new MyClass();
console.log(mc.name);
// 因mc实例中没有name属性,所以返回为undefined
MyClass.prototype.name=("777777");
mc.age = 123;
console.log(mc.name);
// 返回为777777,prototype为原型对象,原型对象为一个类的公共区域,由该类创建的实例中都可以访问prototype。
console.log("name" in mc);
// 返回true,使用【in】去检查对象中是否含有某个属性时,对象中没有原型对象中有,也会返回true。
console.log(mc.hasOwnProperty("name"));
//返回false,使用对象的【hasOwnProperty()】方法来检查对象本身中是否含有某个属性。
console.log(mc.hasOwnProperty("age"));
//返回为true。
console.log(mc.hasOwnProperty("hasOwnProperty"));
//返回为false,mc中无该方法,没有主动添加但可以使用的属性、方法为原型对象中的属性、方法。
console.log(mc.proto.hasOwnProperty("hasOwnProperty"));
//返回为false,mc.proto中也无该方法。
console.log(mc.proto.proto.hasOwnProperty("hasOwnProperty"));
//返回为true,原型链一般为两层,还找不到会一直找到Object的原型中。
console.log(mc.proto.proto.proto);
//返回为null,Object对象的原型中没有原型,所以为null。

二、toString()
1、当使用直接在页面中打印一个对象时(console.log()),实际上是输出该对象的toSting()方法的返回值,如果想要自定义输出的返回值:

-可为该对象创建一个toSting()方法,(方法:对象的属性为一个函数)
per.toString() = function (){
"在这里自定义想要输出的返回值。";
};
输出时,先在当前对象中寻找toString方法,如有,则直接输出。
如果想自定义该对象的输出为对象的详细信息,可:
per.toString = function(){
return "Person[name="+this.name+",age="+this.age+",gender="+this.gender+"]";
}
*拼串注意使用【+】;
*属性的值不能写死,写成变量。
但是,直接在该对象中添加具有局限性,只有该对象可以使用。

-在大类的原型对象prototype中添加一个toString()方法:
Person.prototype.toString = function(){
return "Person[name="+this.name+",age="+this.age+",gender="+this.gender+"]";
};
console.log(per.toString());
所有Person类中的实例都可使用。

三、垃圾回收(Garbage Collection)
-当一个对象没有变量及属性对它进行引用时,则无法无操作该对象,这样的对象就属于程序中的垃圾,当这种对象过多时,会占用程序中大量的内存空间,导致程序变慢。
-程序运行过程中,会累计垃圾,当垃圾过多时,会影响到程序的运行速度。
-JS拥有自动的垃圾回收机制,会自动将这些垃圾对象从内存中销毁,开发人员不需要也不能进行垃圾回收操作。
-可将不再使用的对象设置为null来使浏览器区分,obj = null 则意味着这个对象可以销毁。

——————————————2019-11-10 22:50—————————————

你可能感兴趣的:(JS基础学习日志之原型链、原型中的toString()、垃圾回收机制)