javascript原型与原型链

一、Javascript对象

javaScript 中,万物皆对象!对象是拥有属性和方法的数据。属性是与对象相关的值;方法是能够在对象上执行的动作。但对象也是有区别的。分为普通对象(Object)和函数对象(Function),Object和Function 是JS自带的函数对象。下面举例说明:

function f1() {};
var f2 = function() {};
var f3 = new Function();

console.log(typeof f1); //function
console.log(typeof f2); //function
console.log(typeof f3); //function

var o1 = {};
var o2 = new Object();
var o3 = new f1();

console.log(typeof o1); //object
console.log(typeof o2); //object
console.log(typeof o3); //object

console.log(typeof Object); //function
console.log(typeof Function); //function
其中f1、f2、f3就是函数对象;o1、o2、o3就是普通对象。在js中还有两种值null、undefined,其中null是属于普通对象的,因为 typeof null 值是object;undefined是一种独特的类型不是普通对象也不是函数对象, 因为 typeof undefined 值是undefined。

只要是用Function关键字定义的对象都是函数对象,其他定义的对象都是普通对象。

二、javascript原型

javascript原型又称为js原型对象。在javascript中,每当定义一个对象的时候,对象中都会包含一些预先定义的属性。其中函数对象中一个预定义的属性prototype就是原型对象。注:普通对象是没有prototype原型对象的。
那么原型对象是用来做什么的呢?原型对象主要的作用是用来继承的。
function Person(name) {
    this.name = name;
};
Person.prototype.getName = function() {
    return this.name;
};

function Student(name, age) {
    this.age = age;
};
Student.prototype = new Person("人");
Student.prototype.getAge = function() {
    return this.age;
};

var xiaoming = new Student("xiaoming", 12);
xiaoming.getAge(); //12
xiaoming.getName(); //人


三、Javascript原型链

js在创建对象的时候都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。

上面的例子中:

console.log(Student.prototype.__proto__ === Person.prototype); //true
console.log(xiaoming.__proto__ === Student.prototype); //true
上面的代码证明的就是对象的__proto__指向的是创建它的函数的原型对象。函数对象__proto__指向的是Function.prototype。

console.log(xiaoming.name); //人
上面的代码就显示了原型链的作用,js中,当一个对象在查找一个属性的时候会先看自身有没有此属性,如果有就返回这个属性,否则就去__proto__指向的对象中查找,有就返回,否则继续去__proto__指向的对象中查找,一直查找到原型链的尽头还有没有就返回undefined。

四、constructor

原型对象prototype中都有一个预定义的constructor属性,用来引用它的函数对象。这是一种循环引用。

Person.prototype.constructor === Person; //true
Function.portotype.constructor === Function; //true
Object.prototype.construct === Object; //true
Object.constructor === Function; //true
Function.constructor === Object//false;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值