转码日记——Javascript笔记(7)

原型

我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype,这个属性对应着一个对象,这个对象就是我们所谓的原型对象。无论是普通函数还是构造函数,都会有这个属性,且每个函数的prototype都是唯一的。

//检查函数的prototype 语法:函数.prototype
console.log(MyClass.prototype);

如果函数作为普通函数调用,prototype有无都一样;但是当函数作为构造函数调用时,它所创建的对象都会有一个隐藏的属性,指向该函数的原型对象。

function MyClass(){
}
var mac = new MyClass(); 
//mac和MyClass指向同一个原型对象,也就是myclass函数的原型对象
//调用构造函数创建的对象的原型可以通过 变量名.__proto__ 访问
console.log(mac.__proto__ == MyClass.prototype);// 返回true

原型对象就像一个公共区域,所有同一个类的实例都可以访问到这个原型对象。所以我们可以将对象中共有的内容设置到原型对象中,且不回污染全局作用域。

当我们访问一个对象的属性或方法时,它会先在自身对象中寻找,如果有则直接使用,没有则会去原型对象中寻找,如果找到则直接使用。

var mac = new MyClass();
//向mac中添加属性a
mac.a = "我是a";
console.log(mac.a); //返回“我是a”
//如果mac变量中含有要使用的属性,则直接使用

MyClass.prototype.a = 123;
var mac = new MyClass();
console.log(mac.a); //返回123
//当前变量如果没有属性就去原型对象中寻找属性

检查对象中是否含有某属性

MyClass.prototype.name = "我是原型中的名字"; //设置原型对象中的属性
var mac = new MyClass(); 
console.log("name" in mac); //返回true
//使用in检查对象中是否含有某个属性时,如果对象中没有但原型中有,也会返回true

//可以使用hasOwnProperty()来检查对象自身中是否含有该属性
console.log(mac.hasOwnProperty("name")); //返回false
//该方法只有对象自身含有属性时,才会返回true

原型对象也是对象,所以原型对象也有原型。hasOwnProperty()是在原型对象中的原型中。

console.log(mac.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));

当我们使用一个对象或方法时,会先在自身中寻找,如果没有则去原型中寻找,再没有就去原型的原型中寻找,直到找到Object对象的原型,Object对象的原型没有原型,如果在Object对象中依然没有找到,则返回undefined

垃圾回收

当一个对象没有任何的变量或属性对它进行引用,此时我们将永远无法操作该对象,这样的对象被称为垃圾,占用大量内存空间,程序运行速度变慢。

JS中拥有自动垃圾回收机制,会自动将这些垃圾对象从内存中销毁,我们不需要也不能进行垃圾回收。但是浏览器无法判断该对象是否是垃圾,所以是垃圾的对象赋值null即可。

var obj = new Object ();
obj = null; //这里js会自动回收垃圾

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值