JavaScript学习笔记

了不起的NodeJS(二)

2016-10-27  本文已影响71人  我就是L
/**
 * 无法判定对象所属类型
 */
function createPerson(name, age, job) {
    return {
        name: name,
        age: age,
        job: job,
        say: function () {
            console.log(`my name is ${this.name},age is ${this.age},job is ${this.job}`)
        }//这里不可用箭头函数,箭头函数中的this,arguments不会被绑定,会沿着父环境逐级向上寻找
    }
}
var person1 = createPerson('lyf', 22, 'node');
person1.say();
/**
 * 每个方法会在每个实例上创建一次,即方法不被不同实例共享
 */
function Person(name, job) {
    this.name = name;
    this.job = job;
    this.say = function () {
        console.log(`my name is ${this.name},job is ${this.job}`);
    }
}
/**
 * 1、创建一个新对象
 * 2、将构造函数作用域赋值给新对象(即this指向新对象)
 * 3、执行构造函数中代码
 * 4、返回新对象
 */
/**
 * var p1=new Person()
 * 1、var p1={}
 * 2、p1.__proto__=Person.prototype
 * 3、Person.call(p1)
 */
var person = new Person('Lyf', 'node');
person.say();
console.log(person.constructor == Person)
/**
 * 所有对象共同使用同一数据,当a修改后b中访问也是修改后的值
 */
function Person() {
}
Person.prototype = {
    constructor: Person,
    name: 'Lyf',
    job: 'Node',
    say: function () {
        console.log(`my name is ${this.name},job is ${this.job}`)
    }
}
var person = new Person();
person.say();
/**
 * 完美
 */
function Person(name, job) {
    this.name = name;
    this.job = job;
    if (typeof this.say !== 'function')//只有第一次才会创建原型方法
        Person.prototype.say = function () {
            console.log(`my name is ${this.name},job is ${this.job}`)
        }
}
var person = new Person('Lyf', 'Node');
person.say();
上一篇下一篇

猜你喜欢

热点阅读