-
实例属性,静态属性与原型属性
实例属性定义在实例上,可以在构造函数的内部的this上进行定义,也可以在构造函数实例化以后的实例上进行定义。
静态属性,定义在构造函数之上的属性。可通过构造函数直接访问。
原型属性,定义在构造函数原型对象之上的属性。
function Person(name){ // 在构造函数内部的this上进行定义实例属性 this.name = name; } // 在构造函数上定义静态属性 Person.sex = 'male'; // 在构造函数的原型对象上定义原型属性 Person.prototype.weight = 20 let person = new Person('wang'); // 在构造函数实例化以后的对象上进行定义实例属性 person.age = 23; // 访问实例属性name console.log(person.name) // wang // 访问实例属性age console.log(person.age) // 23 // 访问静态属性sex console.log(Person.sex) // male // 访问原型属性weight console.log(person.weight) // 20 // 通过构造函数访问原型属性weight console.log(Person.prototype.weight); // 20 -
实例方法,静态方法与原型方法
实例方法定义在实例上,可以在构造函数内部的this上进行定义,也可以在构造函数实例化以后的实例上进行定义。
静态属性,定义在构造函数之上的属性。可通过构造函数直接访问。
原型属性,定义在构造函数原型对象之上的属性。
function Person(name) { this.name = name; // 在构造函数内部的this上进行定义实例属性 this.sayIn = function() { console.log('my name is ', this.name); } } // 在构造函数上定义静态方法 Person.eat = function(){console.log('i can eat anything')}; // 在构造函数的原型对象上定义原型方法 Person.prototype.run = function(){console.log('i can run 100m in 9.88s')} let person = new Person('li'); // 在构造函数生成的实例上定义实例方法 person.sayOut = function(){ console.log('my name is out ', this.name); } // 访问实例方法sayIn person.sayIn(); // my name is li // 访问实例方法sayOut person.sayOut(); // my name is li // 访问静态方法eat Person.eat(); // i can eat anything // 访问原型方法run person.run(); // i can run 100m in 9.88s // 通过构造函数访问原型方法 Person.prototype.run() // i can run 100m in 9.88s -
ES5与ES6中,静态方法,静态属性声明的区别?
class Person{ constructor(sex) { this.sex = sex; } // 使用static关键字声明静态方法 static printSex(){ console.log('this is printSexMethod'); } } // 静态属性只能通过 类.属性名 来声明 Person.age = 20; // 通过 类.方法名 来声明静态方法 Person.printSexOut = () => { console.log('this is printSexMethodOut') } console.log('age', Person.age); // 20 Person.printSex(); // this is printSexMethod Person.printSexOut(); // this is printSexMethodOut