前言
将函数定义在全局作用域, 污染了全局作用域的命名空间
一、原型 prototype
我们所创建的每一个函数, 解析器都会向函数中添加一个原型 prototype
这个属性对应着一个对象, 这个对象就是我们所谓的原型对象
二、使用
1. 特点
当我们访问对象的一个属性或方法时, 它会先在对象自身中寻找, 如果有则直接使用
如果没有则会去原型对象中寻找, 如果找到则直接使用
2. 例子
<script type="text/javascript">
function MyClass(){
}
// 向MyClass的原型中添加属性a
MyClass.prototype.a = "zbj"
var mc = new MyClass();
console.log(mc.a); // zbj
</script>
3. __proto__
- 当函数以构造函数的形式调用时, 它所创建的对象中都会有一个隐含的属性指向该构造函数的原型对象, 我们可以通过__proto__来访问属性.
<script type="text/javascript">
function MyClass(){
}
var mc = new MyClass();
console.log(mc.__proto__); // Object
</script>
原型对象就相当于一个公共的区域, 所有同一个类的实例都可以访问这个原型对象.
我们可以将对象中共有的内容, 统一设置到原型对象中
4. 向原型中添加属性
<script type="text/javascript">
function MyClass(){
}
// 向原型中添加属性
MyClass.prototype.a = 123;
var mc = new MyClass();
console.log(mc.a); // 123
</script>
当我们访问对象的一个属性或方法时, 它会先在自身找, 找到则直接使用, 找不到会去原型对象中找