js-面向对象学习

  • 检测对象是否拥有某一属性,能够用in操做符判断;若是in判断一个属性存在,这个属性有多是继承的。要判断一个属性是不是自身拥有的,而不是继承获得的,能够用hasOwnProperty()方法。

JavaScript不区分类和实例的概念,而是经过原型(prototype)来实现面向对象编程。java

var stu = {
    name : 'name',
    age : 23
}
var xiaoming = {
    name : 'xiaoming'
}
xiaoming.__proto__ = stu;//把xiaoming的原型指向了stu,看起来像是继承了;

在编写JavaScript代码时,不要直接用obj.proto__去改变一个对象的原型,而且,低版本的IE也没法使用__proto。Object.create()方法能够传入一个原型对象,并建立一个基于该原型的新对象,可是新对象什么属性都没有。编程

//原型对象;
var stu = {
    name : 'name',
    age : 23
}
function createStu(name){
    //基于stu原型建立一个新对象
    var obj = Object.create(stu);
    //初始化新对象;
    s.name = name;
    return obj;
}

javaScript对每一个建立的对象都会设置一个原型,指向它的原型对象。 当咱们用obj.xxx访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,若是没有找到,就到其原型对象上找,若是尚未找到,就一直上溯到Object.prototype对象,最后,若是尚未找到,就只能返回undefined。函数

var arr = [1, 3, 5]
//原型链
arr ----> Array.prototype---->Object.prototype ----> null

function foo() {
    return 0;
}
//原型链
foo ----> Function.prototype ----> Object.prototype ----> null

对象的构造函数this

function Students(name) {
            this.name = name;
            this.hello = function (){
                console.log('create student, name:' + this.name);
            }
}    
var stu = new Students('xiaoli');
//原型链
stu ----> Students ----> Object.prototype ----> null

用new xxx()建立的对象还从原型上得到了一个constructor属性,它指向函数Student自己:prototype

调用构造函数千万不要忘记写new。为了区分普通函数和构造函数,按照约定,构造函数首字母应当大写,而普通函数首字母应当小写.code

定义对象和继承:对象

class Student {
            constructor(name) {
                this.name = name;
            }

            hello (){
                alert('Hello, ' + this.name);
            }
 }

class PrimaryStudent extends Student {
            constructor(name, grade) {
                super(name);
                this.grade = grade;
            }

            myGrade(){
                alert('I am at grade ' + this.grade);
            }
        }
相关文章
相关标签/搜索