首页 > 编程语言 > 详细

JavaScript原型与原型链

时间:2020-12-24 09:24:19      阅读:34      评论:0      收藏:0      [点我收藏+]

普通对象与函数对象

在JavaScript 的世界中,万物皆对象,但对象之间也是有区别的,分为普通对象和函数对象。

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

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

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

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

//Object、Function是JS自带的函数对象
console.log(typeof Object) //function 
console.log(typeof Function) //function  
上面的例子中 o1 o2 o3 为普通对象,f1 f2 f3 为函数对象。怎么区分,其实很简单,函数对象本质就是由new Function()构造而来,凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。f1、f2、Function、Object 归根结底也都是通过 new Function()的方式创建的。
 
构造函数创建对象
function Person(name, age) {
 this.name = name
 this.age = age
 this.say = function() { alert(this.name) } 
}
var person1 = new Person(‘sun‘, 20)
var person2 = new Person(‘zhang‘, 23)

上面的例子中 person1 和 person2 都是 Person 的实例。这两个实例都有一个 constructor属性,该属性(是一个指针)指向 Person。 即:

console.log(person1.constructor === Person) //true
console.log(person2.constructor === Person) //true

结论:实例的构造函数属性(constructor)指向构造函数。

prototype

在 JavaScript 中,每当定义一个对象(函数也是对象)的时候,对象中都会包含一些预定义的属性。其中每个函数对象都有一个prototype 属性,这个属性指向函数的原型对象。

 

function Person() {}
Person.prototype.name = ‘zhang‘
Person.prototype.age  = 20
Person.prototype.say = function() {
  alert(this.name)
}
  
var person1 = new Person()
person1.say() // zhang

var person2 = new Person()
person2.say() // zhang

console.log(person1.say === person2.say) //true

 

原型对象,它就是一个普通对象。在默认情况下,所有的原型对象都会自动获得一个 constructor属性,这个属性(是一个指针)指向 prototype 属性所在的函数(Person)。

原型对象其实就是普通对象(但 Function.prototype 除外,它是函数对象,并且它很特殊,它没有prototype属性(前面说道函数对象都有prototype属性))。

 

JavaScript原型与原型链

原文:https://www.cnblogs.com/sunyudi/p/14178180.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!