码迷,mamicode.com
首页 > Web开发 > 详细

js原型和原型链个人理解(我的理解)

时间:2016-05-17 00:48:28      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

<script>
//普通对象与函数对象,js万物皆是对象
//自带的
function a1() {
function f1() {}
var f2=function () {}
var f3=new Function(‘str‘,‘console.log(str)‘);
var o3=new f1();
var ol={};
var o2=new Object();

console.log(typeof Object);//function
console.log(typeof Function);//function
console.log(ol);//object{}
console.log(typeof o2);//object
console.log(typeof o3);//object
console.log(typeof f1);//function
console.log(typeof f2);//function
console.log(typeof f3);//function
}
//原型对象
function b1() {
}
function b2 () {
console.log(b1.prototype);//b1 {}
console.log( typeof b1.prototype);//object
console.log(typeof Function.prototype);//function(特殊情况)
console.log(typeof Object.prototype);//object
console.log(typeof Function.prototype.prototype);//undefined
}
//原型作用:继承
var p1=function (name) {
this.names=name;
};
p1.prototype.getM1=function () {
return this.names
};
var name1=new p1();
name1.getM1();
//例子:原型链
console.log(name1.__proto__===p1.prototype);//true
console.log(p1.prototype.__proto__===Object.prototype);//true
console.log(name1.__proto__===Object.prototype);//false
console.log(Object.prototype.__proto__);//null 最大的objct指向的是就是null,这样就表示是原型链
//疑点说明
console.log(Object.__proto__===Function.prototype);//true
//Object它是函数对象,而且是指向Function的
console.log(Function.__proto__===Function.prototype);//true
//Function与Object一样,但不同是指向Function.prototype;
//上面的方式其实是按照现实中的方式来的
//从无到有的情况
//Function.__proto__===Object.prototype其实就是指向自己,没有任何意义
//js一切均是对象,函数也是对象
//constructor预定义属性,用于引用原型函数对象,是循环引用
//父类.prototype.constructor是全等于父类
//Object.constructor==Function,object本身 就是function函数构造的
//constructor是在该对象原型链上寻找的第一个constructor属性所指向的对象:自己总结下:也就是实例化对象指向父类的对象
function d1() {

}
var d2=new d1();
console.log(d2.constructor==d1);//true
console.log(d1.constructor==d2);//false
//原型链生成是靠__proto__ 不是prototype
var animal=function () {};
var dog=function () {};
animal.price=2000;
dog.prototype=animal;
var tidy=new dog;
console.log(dog.price);
console.log(tidy.price);
//通过new方式生成的,会产生链,在操作时,new出来的实例化对象
//obj自动生成一个.__proto__属性,这样,如果没有生成.__proto__属性,使用别的属性时,会undefied未定义,
//但如果使用了obj.attr时,因为obj是一个实例对象,所以在使用attr这个属性时,是不会报错的,会正常输出对应的数据
//只有子类或者实例化对象有__proto__(包括自己,不包括最上面的父类)方法
//prototype会给父类和自自己这个类,如果子类被孙子类继承,那么子类也将有prototype和__proto__属性

js原型和原型链个人理解(我的理解)

标签:

原文地址:http://www.cnblogs.com/mhxy13867806343/p/5500095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!