js原型和原型链
js中最重要的两条链作用域链和原型链,作用域链是从上往下,原型链是从下往上。
1.原型是什么
1)原型就是一个属性,是构造函数属性,是构造函数制造出来的对象的公共祖先,后面所有对象都会继承原型的属性和方法。
2)原型也是一个对象,所有实例对象需要共享的属性和方法都会存放在这个对象里面,不需要共享的就放在构造函数里面。
3)在默认情况下,所有原型对象都会自动获得一个constructor属性,这个属性指向prototype属性所在函数。
即 Person.prototype.constructor == Person。
2.prototype和__proto__
__prototype__ 用来查看原型,是对象的属性,可以查看但是不能修改。
prototype用来修改原型。
每个对象都有__proto__属性,但只有函数对象才有prototype属性
3.任何对象的最终原型都是Object.prototype。
4.原型链:在JavaScript中每个对象都有一个指向他的原型内部对象的内部链接,每个原型对象又有自己的原型,直到某个对象的原型为null为止,组成这条链的最后一环。
5.原型对象的作用:原型对象主要作用主要是用于继承。
6.__proto__ JS在创建对象的时候,都有一个叫做__proto__的内置对象属性,用于指向创建它的构造函数的原型对象。
7.
<script>
//先定义一个构造函数
function Person(config){
this.name = config.name;
this.age = config.age;
this.sex = function(){
if (config.sex == 2) {
return "女"
}else{
return "男"
}
}
}
var obj = {
name : "wang",
age : 16,
sex : 2,
}
var person1 = new Person(obj);
console.log(person1)
console.log(Person.prototype.constructor)//出来的是构造函数Person
console.log(person1.__proto__)//person1__proto__ 和Person.prototype 是一样的
console.log(Person.prototype)
console.log(person1.constructor)//构造函数Person
// Person.prototype.constructor == Person;
// person1.__proto__ == Person.prototype;
// person1.constructor == Person;
// Person.prototype.__proto__ === Object.prototype
// Object.prototype.__proto__ === null
</script>
Object.prototype也有proto属性,但是null。因为处于原型链的顶端。
8.所有的函数构造器也都是一个普通JS独享,可以给构造器添加或者删除属性等。同时也继承了Object.prototype上的所有方法。

浙公网安备 33010602011771号