《JavaScript视频8》原型(重点)、重写toString、垃圾回收

本文探讨JavaScript中的原型prototype,强调其在构造函数中的作用,如何通过原型实现对象间的属性共享。同时,解释了toString方法的使用,如何自定义对象的打印内容,并介绍垃圾回收机制,阐述何时与如何释放不再使用的对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原型prototype

我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype。这个属性值保存着一个地址,而这个地址指向的就是原型对象

如果我们的函数作为普通函数调用,则prototype不起作用。

当函数以构造函数的形式调用时,则它所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象。我们可以通过__proto__来访问该属性。

function MyClass(){
}

var mc = new MyClass();
console.log(mc.__proto__);
console.log(MyClass.prototype);
console.log(mc.__proto__ == MyClass.prototype);

在这里插入图片描述
原型对象就相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象,所有我们可以将对象中共有的内容,统一设置到原型对象中。

MyClass.prototype.a = 123;
console.log(mc.a);

当我们访问对象的一个属性或者方法时,它会现在对象自身中寻找,如果有则直接使用,如果没有则去原型对象中寻找,如果没有,则去原型的原型中找,直到找到Object对象的原型。因此可以将构造函数创建的对象共有的方法统一保存到原型对象里,则所有对象都可以访问到。

MyClass.prototype.sayName = function fun(){
alert(this.name);
};

使用in检查对象中是否含有某个属性时,如果对象中没有但是原型中有,也会返回true

console.log(a in mc);

如果只想检查对象中的属性,可以使用hasOwnProperty()方法。

console.log(mc.hasOwnProperty("a"));
console.log(mc.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));

toString

当我们直接在页面中打印一个对象时,实际上是输出对象toString()方法的返回值。如果我们希望在输出对象时不输出[object Object],可以为对象添加一个toString()方法。

如果想改变一个类中的每个对象的打印内容,可以给构造函数添加一个toString()方法。

function Person(name, age, gender){
	this.name = name;
	this.age = age;
	this.gender = gender;
};
Person.prototype.toString = function(){
	return "我是" + this.name;
};			
var obj1 = new Person("han",27,"male");
console.log(obj1);

当一个对象没有任何变量或属性对它进行引用,此时我们将永远无法操作该对象,这种对象就是一个垃圾,JS会自动销毁这些垃圾对象。

我们需要做的是将不需要的对象设置为null即可

obj1 = null;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值