今日头条 焦点资讯 营销之道 企业报道 淘宝运营 网站建设 软件开发 400电话
  当前位置: 首页 » 资讯 » 软件开发 » 正文

JS原型详解说明

放大字体  缩小字体 发布日期:2018-02-26  来源:企业800网  作者:新格网  浏览次数:360  【去百度看看】
核心提示:本文主要和大家分享JS原型详解说明,原型的5个规则,希望本文能帮助到大家。

本文主要和大家分享JS原型详解说明,原型的5个规则,希望本文能帮助到大家。

  • 所有的引用类型(数组,对象,函数),都具有对象特性,即可自由扩展属性(除了“null”)

var obj ={};obj.a=100//100var arr=[];arr.a=100//100function fn(){}
fn.a=100//100
  • 所有的应用类型,都有一个proto属性(隐式原型),属性值是一个普通的对象

console.log(obj.__proto__);//{constructor: ?, __defineGetter__: ?, __defineSetter__: ?, hasOwnProperty: ?, __lookupGetter__: ?, …}console.log(arr.__proto__);//[constructor: ?, concat: ?, pop: ?, push: ?, shift: ?, …]console.log(fn.__proto__);
//? () { [native code] }
  • 所有的函数都有一个prototype属性(显式原型),属性值也是一个普通对象

console.log(fn.prototype)
//{constructor: ?}
  • 所有的引用类型的 proto属性值指向它的构造函数prototype属性值(即所有引用类型的隐形原型指向他的构造函数的显式原型)

console.log(obj.__proto__===Object.prototype);  //true//Object是一个构造函数
  • 当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去他的proto(即它的构造函数的prototype)中寻找

function Foo(name,age){
    this.name = name;
}
Foo.prototype.alertName = function(){//由于Foo.prototype本身也是一个对象,而对象是可以自由扩展属性的
    alert(this.name);
}var f = new Foo('zhan');
f.printName = function(){
    console.log(this.name);
}
f.printName();//zhan 可以直接在这个对象中找到这个属性f.alertName();//alert弹出zhan 这时候在这个对象本身找不到这个属性,去Foo.prototype找,得到值var A = {n:4399};var B = function(){
    this.n = 9999;
}var C = function(){
    var n = 8888;
}
B.prototype = A;
C.prototype = A;var b = new B();var c = new C();
A.n++;
console.log(b.n);//9999console.log(c.n);//4400//先从他的实例中找,找不到去它的构造函数的prototype中找

this

对上面测试代码来说,永远指向对象本身,所以执行f.alertName
可以弹出zhan

循环自身的属性

还是对上面的测试代码来说,如果对进行循环的话,可以找到,name属性,alertName属性,printName属性,但是一般情况下,我们只希望得到这个对象自身定义的属性,比如:name属性与printName属性

var itemfor(item in f){    if(f.hasOwnProperty(item)){
        console.log(item);     // 高级浏览器已经在forin中屏蔽了来自原型的属性
     //但在这里建议大家还是加上这个判断,保证程序的健壮性(程序对于规范要求以外的输入情况的处理能力)

    }
}

相关推荐:

实例解析js原型和call()

JS原型继承四步曲

关于js原型链的7篇文章推荐

以上就是JS原型详解说明的详细内容,更多请关注php中文网其它相关文章!

 
 
[ 资讯搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 
0条 [查看全部]  相关评论

 
网站首页 | 关于我们 | 联系方式 | 使用协议 | 版权隐私 | 网站地图 | 排名推广 | 广告服务 | 积分换礼 | 网站留言 | RSS订阅 | 吉ICP备11001726号-6
企业800网 · 提供技术支持