javascript - js使用原型中的问题

查看:89
本文介绍了javascript - js使用原型中的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

function label () {
    this.dd=0;
    this.ss='';
}
label.prototype.schema=  {
        "name": '哈哈',
        "age": "13",
        "id": 1 ,
        "rank":12
    }
label.prototype.getRank=function (t) {
    var temp=0;
    if(t.schema.hasOwnProperty("rank")){
        temp=t.schema.rank;
    }
    return temp;
}
//实例
var labelObj=new label();
console.log(labelObj.getRank(labelObj))

我有几个小问题想请教一下

  • label.prototype.schema 改写成 label.schema会有影响吗,什么情况下由于影响, 怎么决定我用那种写法?

  • getRank()中可不可以不传参来完成 获取rank?

  • getRank()这个函数 怎么写才看起来更高效 更优雅?

  • 在我编写的过程中,需要对实例化的对象进行大量的赋值、传值、取值,是我设计的有问题吗,感觉总是怪怪的,
    还是本身不太适用原型来操作?

  • 如果初始构造里同时也有getrank()

     function label () {
    this.dd=0;
    this.ss='';
    this.rank=function(){
        ...
    }
}

执行哪个(原型中的?构造函数中的?) 如何执行另外一个不执行的getrank()?

  • 有没有相关推荐的书籍?

我写过的js文件 没人review ,不知道现在自己究竟哪些地方需要提高,希望大家不吝赐教,多多支出我的不足 !

解决方案

function label(){ return this.init.apply(this, arguments); }

// label原型链
label.prototype = {
    // 预定义的属性
    schema: {
        "name": '哈哈',
        "age": "13",
        "id": 1 ,
        "rank":12
    },
    // 初始化方法, label方法定义了由init作为创建方法
    init: function(arg1, arg2){
        this.dd=arg1;
        this.ss=arg2;
    },
    // 定义通用方法
    getRank: function(){
        // 这里的this就是本实例
        // 返回schema.rank, 没有则返回0
        return this.schema.rank || 0;
    }
}


//实例
var labelObj=new label("dd1");
console.log(labelObj.getRank()) // 12
labelObj.schema.rank = 99;
console.log(labelObj.getRank()) // 99

labelObj.dd; // "dd1"
labelObj.ss; // undefined

这篇关于javascript - js使用原型中的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆